• 二叉树中和为某一值的路径


    题目描述

    输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
     
     
    提交链接:点击
     
     
    思路:读题,发现要求的是从根节点到叶子节点的路径结点和是否等于某一给定的整数。由此,我们很容易想到DFS深度优先搜索,沿着子树一直搜到底(这里就有递归调用DFS的过程),如果发现和等于给定整数,那么将该路径放入最后结果中,如果不等于,那么就要进行退栈的操作,也就是走其他的路径,看看是否满足条件。
     
     
    代码:
    /*
    struct TreeNode {
        int val;
        struct TreeNode *left;
        struct TreeNode *right;
        TreeNode(int x) :
                val(x), left(NULL), right(NULL) {
        }
    };*/
    class Solution {
    public:
        vector<vector<int>> result;
        vector<int> elem;
        void dfs(TreeNode* root, int expectNumber){
            elem.push_back(root->val);
            if(root->val==expectNumber && root->left==NULL && root->right==NULL){//到达了叶子节点且从根节点到叶子节点的和等于整数
                result.push_back(elem);
            }else{  //否则如果不是叶子节点,继续dfs
                if(root->left)
                    dfs(root->left, expectNumber-root->val);
                if(root->right)
                    dfs(root->right, expectNumber-root->val);
            }//如果是叶子节点,但是从根节点到叶子节点的和不等于expectNumber,则元素退栈,进行另一路径的判断
            elem.pop_back();
        }
        vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
            if(root)
                dfs(root, expectNumber);
            return result;
        }
    };
     

    非学无以广才,非志无以成学! 【Magic_chao

  • 相关阅读:
    (转)介绍一些.net开源项目
    (转).Net有哪些大型项目、大型网站的案例?
    Linux下的awk使用
    linux下的sed使用
    linux下的find、grep、cut使用
    CentOS7下的Zabbix4.4安装配置
    NetBackup linux客户端安装
    bat小脚本
    批量复制指定目录下的文件,并统计执行时间
    iptables
  • 原文地址:https://www.cnblogs.com/logo-88/p/9769717.html
Copyright © 2020-2023  润新知