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

题目描述:
输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。

关键点:1. 二叉树、递归
2.因为路径是从根节点开始,因此,最先遍历的应该是根节点,所以应该考虑前序遍历
3.如果遍历到叶子节点发现不符条件,此时应该采用回溯,吐出叶子节点。

class Solution {
public:
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        vector<vector<int>>  ret;
        vector<int> temp;
        int currentSum = 0;
        
        if(root == NULL)
            return  ret;
        
        findPath(root, currentSum, ret, expectNumber, temp);
        return ret;
    }
    
    void findPath(TreeNode* root, int currentSum, vector<vector<int> >&ret, int expectNumber, vector<int>&temp){
        currentSum += root -> val;
        temp.push_back(root -> val);
        
        bool isLeaf = root -> left == NULL && root -> right == NULL;
        if(currentSum == expectNumber && isLeaf){//是叶子节点且路径节点和与给定值相同
            ret.push_back(temp);
        }
        //如果不是叶子节点,则遍历它的子节点
        if(root -> left != NULL)
            findPath(root -> left, currentSum, ret, expectNumber, temp);
        if(root -> right != NULL)
            findPath(root -> right, currentSum, ret, expectNumber, temp);
        
        //返回父节点之前,在路径上删除当前节点
        temp.pop_back();
        
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • B树的定义 一棵m阶的B树满足下列条件: 树中每个结点至多有m个孩子。 除根结点和叶子结点外,其它每个结点至少有m...
    文档随手记阅读 13,470评论 0 25
  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,523评论 1 31
  • 四、树与二叉树 1. 二叉树的顺序存储结构 二叉树的顺序存储就是用数组存储二叉树。二叉树的每个结点在顺序存储中都有...
    MinoyJet阅读 1,631评论 0 7
  • 数据结构和算法--二叉树的实现 几种二叉树 1、二叉树 和普通的树相比,二叉树有如下特点: 每个结点最多只有两棵子...
    sunhaiyu阅读 6,581评论 0 14
  • 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点...
    鸿雁长飞光不度阅读 871评论 0 0