zoukankan      html  css  js  c++  java
  • 递 47. 二叉树中和为某一值的路径

    视频:https://www.acwing.com/video/171/     很好的展示了代码怎么写。

    结合递归细品

    C++递归

    class Solution {
    public:
        //int sum ;
        vector<vector<int>> res; //答案数据,定义成类里面的全局变量
        vector<int> path;    //当前路径
        vector<vector<int>> findPath(TreeNode* root, int sum) {
    
            //sum = sum;
            dfs(root, sum);//做减法,减到正好等于0时,就代表发现路径
            return res;
        }
        void dfs(TreeNode *root, int sum) {
    
            if(root == NULL) return;//当前节点为空,代表不是叶节点,直接return
            path.push_back(root->val);
            sum = sum - root->val;
            //if(!root->left && !root->right && !sum):如果当前节点为叶节点,且是我们要找的路径(sum==0)
            if(!root->left && !root->right && !sum) res.push_back(path); //使用递归时,一定要有明确的终止条件!
            if(root->left)  dfs(root->left, sum);
            if(root->right) dfs(root->right, sum);
            path.pop_back();//我们不光递归一个分支,还要去遍历其他分支,遍历完当前子树要把path清空
    //根节点的左叶子节点满足条件了,还要看看右叶子节点满不满足条件
    } };
    class Solution {
    public:
        vector<vector<int>> res;
        vector<int> path;
        vector<vector<int>> findPath(TreeNode* root, int sum) {
            if(root == NULL) return res;
            dfs(root,sum);
            return res;
            
        }
        void dfs(TreeNode* root, int sum)
        {
            if(root == NULL) return;
            sum = sum - root->val;
            path.push_back(root->val);
            if(root->left == NULL && root->right == NULL && sum == 0) res.push_back(path);
            else
            {
                if(root->left) dfs(root->left,sum);
                if(root->right) dfs(root->right,sum);
            }
            path.pop_back();
            
        }
    };
    

      

    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    设计模式_EventObject和EventListener
    设计模式_Observable与Observer
    zooKeeper_《ZooKeeper官方指南》一致性保障
    thread_为什么多线程是个坏主意
    gtk+学习笔记(三)
    linux c下输入密码不回显
    浮点数在计算机内存中的存储方式
    gtk+学习笔记(二)
    linux下c图形化编程之gtk+2.0简单学习
    关于字符串排序合并的问题
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12313268.html
Copyright © 2011-2022 走看看