剑指offer 二叉树中和为某一值得路径

class Solution {
public:
    void recur(TreeNode* root, const int expectNumber, int curr, vector<vector<int>>& res, vector<int>& path){
        path.push_back(root->val);
        curr += root->val;
        bool isLeaf = (root->left == nullptr && root->right == nullptr);
        if(isLeaf && curr == expectNumber){
            res.push_back(path);
        }
        if(root->left != nullptr){
            recur(root->left, expectNumber, curr, res, path);
        }
        if(root->right != nullptr){
            recur(root->right, expectNumber, curr, res, path);
        }
        path.pop_back();
    }

    vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {
        vector<vector<int>> res;
        vector<int> path;
        if(root == nullptr) return res;
        int curr = 0;
        recur(root, expectNumber, curr, res, path);
        return res;
    }
};

原文地址:https://www.cnblogs.com/theodoric008/p/9575202.html

时间: 2024-08-19 07:08:09

剑指offer 二叉树中和为某一值得路径的相关文章

二叉树中和为某一值得路径 java实现

本题来自<剑指offer> 路径为从根节点到叶节点一条路径,路径经过的各节点数值之和等于某一给定数值,则打印路径上的节点 因为需要打印满足条件的路径节点信息和各节点之和,需要栈记录经过的节点,和一个保存数值之和的变量 用前序遍历方法,可以首先访问节点,然后将节点入栈,并将数值和之前入栈的节点值相加 如果当前之和否满足给定值,判断当前节点是否叶节点,是则打印路径信息 判断节点左右孩子是否为空,递归调用 在调用完,返回时要将入栈的值出栈(此时栈中节点只到父节点),和变量也要变回调用之前的状态 1

剑指Offer二叉树的深度

package Tree; import java.util.LinkedList; import java.util.Queue; /** * 二叉树的深度 * 输入一棵二叉树,求该树的深度. * 从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. */ public class Solution13 { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5, 6, 7

剑指offer——二叉树镜像

操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 代码如下: /** public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ imp

剑指offer 二叉树的下一个结点

题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路: 1)如果一个节点有右子树,那么它的下一个结点就是它的右子树中的最左子节点: 2)如果一个节点没有右子树,并且它还是它父节点的右子节点,我们可以沿着指向父节点的指针一直向上遍历,知道找到一个是它父节点的右子节点的左子节点的节点,就是第一个向右转的子部分根节点. /* struct TreeLinkNode { int val; struct Tr

剑指Offer 二叉树的镜像

题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / 6 10 / \ / 5 7 9 11 镜像二叉树 8 / 10 6 / \ / 11 9 7 5 思路: 直接一个中间指针,递归,交换左右节点,节点为叶子节点的时候返回. AC代码: 1 class Solution { 2 public: 3 void Mirror(TreeNode *pRoot) { 4 if(pRoot==NULL) 5 return ; 6 7 TreeNode *

剑指Offer——二叉树的下一个结点

题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 如果该结点存在右子树,那么返回右子树的最左结点. 如果该结点不存在右子树,那么如果该结点不是其父结点的最右结点,那么返回父结点:否则一直找到最大子树的最右结点是该结点,那么返回该最大子树的根结点的父结点. 代码: 1 /* 2 struct TreeLinkNode { 3 int val; 4 struct TreeLinkNode *le

剑指offer-25.二叉树中和为某一值的路径

0 题目 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径. 1 分析 深度优先遍历+回溯. 出点就是,当target==0,且节点没有子树的时候. vector<vector<int>> FindPath(TreeNode *root, int target) { vector<vector<int>> ret; vector<int> tmp; aux(

剑指offer--31.二叉树中和为某一值的路径

深度优先搜索 ---------------------------------------------------------------------------------------------------------------- 时间限制:1秒 空间限制:32768K 热度指数:317971 算法知识视频讲解 题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的

剑指Offer——二叉树的深度

1.题目描述 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 2.代码实现 public int TreeDepth(TreeNode root) { if (root == null) { return 0; } int left_len = TreeDepth(root.left); int right_len = TreeDepth(root.right); return Math.max(left_len, rig