当前位置: 首页 > news >正文

二叉树的所有路径

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中。

相关文章:

  • 语音转文本SOTA模型部署的实战教程
  • Nginx 刷新后 404 的原因与解决方案
  • 通过特征值和特征向量实现的图像压缩和特征提取
  • 字符串哈希
  • 蓝桥备赛(18)- 红黑树和 set 与 map(下)
  • 正式进入linux 1.0
  • 如何在Django中有效地使用Celery进行定时任务?
  • 内容中台的AI技术基石是什么?
  • WPF可编辑的DataGrid根据条件控制最后一行的按钮显示隐藏
  • C++:三次B样条插值
  • C++ 模版
  • Unity 创建签名证书、获取签名证书信息,证书指纹
  • k8s 修改节点驱逐阈值
  • 基础知识《HTTP字段与状态码详细说明》
  • CP210x 驱动秘籍:打通 Windows 11 端口的任督二脉
  • ssh转发笔记
  • 自然语言秒转SQL—— 免费体验 OB Cloud Text2SQL 数据查询
  • Java开发之微服务架构设计:Spring Cloud Alibaba核心组
  • 结构型模式之代理模式:控制访问的智能方式
  • 通过 CSS 的 命名页面(Named Pages) 技术实现作用域隔离,实现 @page 样式仅影响当前组件
  • 以色列在加沙发起新一轮强攻,同步与哈马斯展开无条件谈判
  • AG600“鲲龙”批生产首架机完成生产试飞
  • 多图|多款先进预警机亮相雷达展,专家:中国预警机已达世界先进水平
  • 韶关一企业将消防安装工程肢解发包,广东住建厅:罚款逾五万
  • 李峰已任上海青浦区委常委
  • 上海“城市文明开放麦”全城总动员,樊振东担任首位上海城市文明大使