【每日挠头算法题(6)】二叉树的所有路径|神奇字符串

简介: 【每日挠头算法题(6)】二叉树的所有路径|神奇字符串

一、二叉树的所有路径

点我直达~

思路:深度优先搜索

  • 使用深度优先搜索:即二叉树的前序遍历。
  • 1.给一个string类型的顺序表:vector<string> path,记录每一条可以遍历的路径,如果该节点不为空,给一个临时的存储路径的string,叫node,将该节点的val存入node中
  • 2.如果该节点的左子节点和右子节点均为空,说明此节点数一条路径的最后节点,此时将临时的存储路径node存储到path中。
  • 3.如果该节点既不为空,且左右节点不全为空,说明该条路径还未走完,则继续遍历即可。

具体代码如下:

class Solution {
public:
    void PrevOrder(TreeNode* root,string node, vector<string>& path)
    {
        //只要该节点不为空,则可继续走
        if(root!=nullptr)
        {
            node+=to_string(root->val);
            //只要左右节点都为空,表明获得一条路径
            if(root->left == nullptr && root->right == nullptr)
            {
                path.push_back(node);
            }
            //如果不是以上的情况,则可以继续递归
            else
            {
                node+="->";
                PrevOrder(root->left,node,path);
                PrevOrder(root->right,node,path);
            }
        }
    }
    vector<string> binaryTreePaths(TreeNode* root) 
    {
        string node = "";
        vector<string> path;
        PrevOrder(root,node,path);
        return path;
    }
};

具体递归展开图如下:

时间复杂度:O(n^2),因为每次对node进行拷贝构造,所有时间消耗O(n),那么总的时间为O(n^2);最坏空间复杂度O(n),此时树呈现出链状,最好空间复杂度为O(logN),此时树为平衡二叉树

二、神奇字符串

点我直达~

思路:模拟双指针

  • 首先需要知道题目需要我们做什么。
  • 神奇字符串定义:只由’1’,'2’组成,且连续的’1’或者’2’出现的次数组合起来可以生成该字符串。
  • 所以我们的目的是构造出神奇字符串。
  • 1.构造一个string类,初始化为s = "122",这样初始化的原因:
  • (1)题目给的神奇字符串类就是如此。
  • (2)要构造神奇字符串需要从第3位开始构造。
  • 2.给定下标 i = 2记录需要构造的字符数字个数,隐式存在的下标j = s.size() - 1,记录需要构造的字符。构造长度为N
  • 也就是说,构造什么字符取决于j的下标对应的字符,如果s[j] = '1',则构造的字符为’2’,如果不是则反过来。构造的个数取决于s[i],如果s[i] = 2,s[j] = 1,则构造的数字为:“22”
  • 3.构造完成后,遍历s的前n个,统计’1’出现的次数即可。(注意:可能最后一次构造会构造2个字符,导致s的长度为n+1,而不是n,所以不能遍历s,只能遍历s的前n个字符)
  • 注:如果 n < 3,则无需再构造,返回1即可。

过程展示:

具体代码如下:

class Solution {
public:
    int magicalString(int n) 
    {
        string s = "122";
        int i = 2; // i表示要构造几位
        //要构造什么取决于最后一位,如果s的最后一位是'1',就构造'2',如果s的最后一位是'2',就构造'1'
        for(i = 2;i < n ; ++i)
        {
            int len = s[i] - '0';
            if(s[s.size()-1] == '2')
            {
                while(len--)
                    s+='1';
            }
            else
            {
                while(len--)
                    s+='2';
            }
        }
        //此时遍历n个数字,计算1出现次数,不是遍历s,因为最后一次构造啃s构造了两个数字,导致s的长度是n+1而不是n
        int count = 0;
        for(int i = 0;i<n;++i)
        {
            if(s[i] == '1')
                ++count;
        }
        return count;
    }
};

时间复杂度O(n),空间复杂度O(n),需要构造长度为n的字符串

总结

通过写二叉树,我深知我的递归没有学得扎实,打击心态呀,所以从明天开始着手刷二叉树的题,练练递归。

写这个神奇字符串,还是读不懂题目的,看了答案大佬们的题解才恍然大悟。需要多加强练习。

相关文章
|
6月前
|
传感器 机器学习/深度学习 编解码
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
MATLAB|主动噪声和振动控制算法——对较大的次级路径变化具有鲁棒性
308 3
|
5月前
|
机器学习/深度学习 算法 C++
【DFS/回溯算法】2016年蓝桥杯真题之路径之谜详解
题目要求根据城堡北墙和西墙箭靶上的箭数,推断骑士从西北角到东南角的唯一路径。每步移动时向正北和正西各射一箭,同一格不重复经过。通过DFS回溯模拟“拔箭”过程,验证路径合法性。已知箭数约束路径唯一,最终按编号输出行走顺序。
|
7月前
|
算法 机器人 定位技术
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
【VRPTW】基于matlab秃鹰算法BES求解带时间窗的骑手外卖配送路径规划问题(目标函数:最优路径成本 含服务客户数量 服务时间 载量 路径长度)(Matlab代码实现)
224 0
|
6月前
|
机器学习/深度学习 传感器 算法
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
【无人车路径跟踪】基于神经网络的数据驱动迭代学习控制(ILC)算法,用于具有未知模型和重复任务的非线性单输入单输出(SISO)离散时间系统的无人车的路径跟踪(Matlab代码实现)
405 2
|
6月前
|
机器学习/深度学习 传感器 算法
基于全局路径的无人地面车辆的横向避让路径规划研究[蚂蚁算法求解](Matlab代码实现)
基于全局路径的无人地面车辆的横向避让路径规划研究[蚂蚁算法求解](Matlab代码实现)
294 8
|
6月前
|
算法 数据挖掘 区块链
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
基于遗传算法的多式联运车辆路径网络优优化研究(Matlab代码实现)
172 2
|
6月前
|
机器学习/深度学习 负载均衡 算法
【卡车和无人机协同配送路径优化】遗传算法求解利用一辆卡车和两架无人机配合,将小包裹递送给随机分布的客户,以使所有站点都由卡车或无人机递送一次后返回起始位置(中转站)研究(Matlab代码实现)
【卡车和无人机协同配送路径优化】遗传算法求解利用一辆卡车和两架无人机配合,将小包裹递送给随机分布的客户,以使所有站点都由卡车或无人机递送一次后返回起始位置(中转站)研究(Matlab代码实现)
364 7
|
6月前
|
存储 算法 数据可视化
基于禁忌搜索算法的TSP问题最优路径搜索matlab仿真
本程序基于禁忌搜索算法解决旅行商问题(TSP),旨在寻找访问多个城市的最短路径。使用 MATLAB 2022A 编写,包含城市坐标生成、路径优化及结果可视化功能。通过禁忌列表、禁忌长度与藐视准则等机制,提升搜索效率与解的质量,适用于物流配送、路径规划等场景。
|
6月前
|
机器学习/深度学习 传感器 算法
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
基于matlab瞬态三角哈里斯鹰算法TTHHO多无人机协同集群避障路径规划(目标函数:最低成本:路径、高度、威胁、转角)(Matlab代码实现)
236 1
|
6月前
|
算法 数据可视化 异构计算
【车辆路径问题VRPTW】基于北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW研究(Matlab代码实现)
【车辆路径问题VRPTW】基于北极海鹦优化(APO)算法求解带时间窗的车辆路径问题VRPTW研究(Matlab代码实现)
326 0