首页 > 其他 > 详细

剑指offer(二十四):二叉树中和为某一值的路径

时间:2020-08-16 22:40:35      阅读:98      评论:0      收藏:0      [点我收藏+]

题目描述

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

思路:中序递归遍历或者先序递归遍历,栈中所存结点为当前结点的所有祖先结点,因此设置一个vector用来存储当前栈中的结点值,当走到叶子结点时,判断当前的结点和是否为给定值,弹出结点,每一轮递归返回到父结点时,当前路径也应该回退一个结点

class Solution {
    vector<vector<int> > result;
    vector<int> tmp;
public:
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        
        if(root){
            tmp.push_back(root->val);
            if(!root->left && !root->right){
                if(sum(tmp) == expectNumber)
                    result.push_back(tmp);
            }
            FindPath(root->left,expectNumber);
            FindPath(root->right,expectNumber);
            tmp.pop_back();
        }
        return result;
    }
    int sum(vector<int> v){
        int sum = 0;
        for(int i=0;i<v.size();i++){
            sum+=v[i];
        }
        return sum;
    }
};

技术分享图片

优化:

class Solution {
    vector<vector<int> > result;
    vector<int> tmp;
public:
    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        
        if(root){
            tmp.push_back(root->val);
            if(!root->left && !root->right && root->val == expectNumber)
                    result.push_back(tmp);
            FindPath(root->left,expectNumber-root->val);
            FindPath(root->right,expectNumber-root->val);
            tmp.pop_back();
        }
        return result;
    }
    
};

技术分享图片

 

剑指offer(二十四):二叉树中和为某一值的路径

原文:https://www.cnblogs.com/ttzz/p/13514627.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!