二叉树的所有路径

本文介绍了一种使用递归方法来寻找二叉树从根节点到叶子节点的所有路径的算法。通过传递局部变量的方式,有效地记录了每一条路径,并最终以字符串形式返回所有路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给一棵二叉树,找出从根节点到叶子节点的所有路径。

样例

给出下面这棵二叉树:

   1
 /   \
2     3
 \
  5

所有根到叶子的路径为:

[
  "1->2->5",
  "1->3"
]

思路:

       这个题的重点在于如何存储前面的结点的值,用递归的思想。下面说一下具体实现:

        首先说一下存储所有路径的函数allpath的大体思路。如果当前点不为空就将其值放入向量path中存储,这个递归的参数中传递的是局部变量向量path,每个函数中的path和前一个函数的path中的元素不同,这就保证了每个path存储了一条路径。当遇到叶子节点时,停止递归,将当前路径放入以string为元素的向量。中间将数值变为string是一个较为创新的地方。

       在主函数中调用写的allpath函数,得到所有路径。

代码:

class Solution {
public:
    /**
     * @param root the root of the binary tree
     * @return all root-to-leaf paths
     */
     std::vector<string> ap;
     void allpath(TreeNode *root,vector<int> path)
     {
         if(root!=NULL)
         {
             path.push_back(root->val);
             if(root->left==NULL&&root->right==NULL)
             {  string a;
                int n=path.size();
                if(n==1)
                 a=to_string(path[0]);
                else
                { for(int i=0;i<n-1;i++)
                  {  string str=to_string(path[i]);
                     a=a+str+"->"; 
                   }
                    string str1=to_string(path[n-1]);
                    a=a+str1;
                }
                ap.push_back(a);
                
             }
             else
             {
                 allpath(root->left,path);
                 allpath(root->right,path);
             }
         }
     }
    vector<string> binaryTreePaths(TreeNode* root) {
        // Write your code here
        vector<int> p;
        allpath(root,p);
        return ap;
    }
};

感想:

这个题是在老师讲了之后做的,不一样的地方就是变为string类型。之前想过这个题不知道如何下手,传局部变量的想法很好的解决了这个问题,突然有种恍然大悟的感觉,传局部变量,存储不同的信息的做法十分值得学习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值