欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 二叉树的所有路径

二叉树的所有路径

2025/5/8 18:23:02 来源:https://blog.csdn.net/2301_82195117/article/details/146265381  浏览:    关键词:二叉树的所有路径

1.给定一个二叉树,返回所有从根节点到叶子节点的路径。

#include <bits/stdc++.h>
using namespace std;
struct TreeNode{
    int val;
    TreeNode* left;
    TreeNode* right;
    TreeNode(int x)
    {
        val=x;
        left=NULL;
        right=NULL;
    }
};
void traversal(TreeNode* node,vector<int>& path,vector<string>& result)
{
    path.push_back(node->val);
    if(node->left==NULL&&node->right==NULL)
    {
        string paths;
        for(int i=0;i<path.size()-1;i++)
        {
            paths+=to_string(path[i]);
            paths+="->";
         } 
        paths+=to_string(path[path.size()-1]);
        result.push_back(paths);
        return ;
    }
    if(node->left)
    {
        traversal(node->left,path,result);
        path.pop_back();
    }
    if(node->right)
    {
        traversal(node->right,path,result);
        path.pop_back();
    }
    return;
}
vector<string> biary(TreeNode* root)
{
    vector<int> path;
    vector<string> result;
    if(root==NULL)
    return result;
    traversal(root,path,result);
    return result;
}
int main()
{
    TreeNode* root=new TreeNode(1);
    root->left=new TreeNode(2);
    root->right=new TreeNode(3);
    root->left->right=new TreeNode(5);
    vector<string> result=biary(root);
    for(string c:result)
    {
        cout<<c<<endl;
     } 
    return 0;
}
思路:在这里我们需要从上向下确定路径即从父结点到子结点,所以我们使用前序遍历,这道题目中涉及到回溯,因为我们要把路径记录下来,需要回溯来回退一个路径再进入另一个路径。

在这里我们用path来记录路径,用result返回结果,确定的终止条件即当遍历到叶子结点时,我们将此时path里面收集到的val转换成路径形式存到result中。
遍历过程中如果存在左子树,就递归遍历,同时要记得回溯(path.pop_back()),因为此时已经将记录存在result中了,我们要开始收集下一条路径·,因此要回溯,同样存在右子树,也要递归遍历,也得回溯,所有路径都被保存到result中。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词