Leetcode二叉树之 257所有路径

目前脑子里还有很多问题,就比如遇到问题如何选择"前中后序遍历"?????理论依据是什么?

这个题有点意思

看着个题的时候,需要了解到,递归中隐藏着回溯,具体可参考代码回想录.

其实只要把遍历这个东西理解透彻就好办,主要还是卡在了路径的储存格式:

需要利用两个vector来储存,例:vector<int> path,vector<string> res,

既用path储存每个节点的值, 然后将path转化为string  用res这个vector<string>来储存;

class Solution {
public:

    void traversal(TreeNode* cur,vector<int>& path,vector<string>& res){
        path.push_back(cur->val);
  /*----------------------判断是否为"叶子"并进行处理----------------------------------*/ 
             
        if(cur->left==nullptr && cur->right==nullptr){
            //如果是“叶子”节点说明可以将path里的数据输出成字符串并加到res里了;
            string pathstr; 
            //先搞定第n-1个,因为最后一个字符串里没有"->"
            for(int i=0;i<path.size()-1;i++)
            {
                pathstr+=to_string(path[i]);
                pathstr+="->";
            }
            pathstr+=to_string(path[path.size()-1]);
            res.push_back(pathstr);
            return ;

        }
/*-----------------------------------------------------------------------------------*/
        if(cur->left){
            traversal(cur->left,path,res);
            path.pop_back();//要注意何时进行pop操作,这也是回溯的过程
           // res.pop_back();//在这里跌过坑,注意这里pop的是path不是res,之前没理解这里
        }
        if(cur->right){
            traversal(cur->right,path,res);
            //res.pop_back();
            path.pop_back();
        }

    }

    //这里不用过多关注
    vector<string> binaryTreePaths(TreeNode* root) {
        vector<string> result;
        vector<int> path;
        if (root == NULL) return result;
        traversal(root, path, result);
        return result;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值