美文网首页
判断二叉树中是否存在和为某值的路径&打印这些路径

判断二叉树中是否存在和为某值的路径&打印这些路径

作者: 小码弟 | 来源:发表于2018-11-09 09:52 被阅读0次

给定一棵二叉树和一个整型,判断是否存在一条从根节点到叶节点之和为给定整型的一条路径

前序递归:每次检查是否到达叶节点,如果是节点,检查此时的target是否等于该节点的值,若相等返回true,不相等返回false;递归检查左右子树,记得要把target 更新为减去此时节点值之后的值

bool hasPath(TreeNode* root, int target)
{
   if(root == NULL) 
      return false;
    if(root->left == NULL && root->right == NULL)
    { 
        if(root->val == target)
          return true;  
        else
            return false;
    }
    return hasPath(root->left, target-root->val) 
          || hasPath(root->right, target-root->val);
}

给定二叉树和一个整型,找到这棵树中所有路径和为该整型的路径

vector<vector<int>> hasPath(TreeNode* root, int target)
{
    vector<vector<int>> all_path;
    if(root == NULL)
      return all_path;
    
    vector<int> one_path;
    int current_sum = 0;
    hasPathHelper(root, target, all_path, one_path, current_sum);
    return all_path;
}

void hasPathHelper(TreeNode* root, int target, 
                   vector<vector<int>>& all_path, 
                   vector<int>& one_path, 
                   int current_sum)
{
    one_path.push_back(root);
    current_sum += root->val;
    // 先序过程
    if(root->left == NULL && root->right == NULL && current_sum == target)
    {
        all_path.push_back(one_path);
    }
    if(root->left)
      hasPathHelper(root->left, target, all_path, one_path, current_sum);
     if(root->right)
       hasPathHelper(root->right, target, all_path, one_path, current_sum);
     // 回溯,弹出当前节点
     TreeNode* last = one_path.back();
      current_sum -= last->val;
      one_path.pop_back();
}

相关文章

  • 判断二叉树中是否存在和为某值的路径&打印这些路径

    给定一棵二叉树和一个整型,判断是否存在一条从根节点到叶节点之和为给定整型的一条路径 前序递归:每次检查是否到达叶节...

  • 112.路径总和

    题目#112.路径总和 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值...

  • 《剑指offer》— JavaScript(24)二叉树中和为某

    二叉树中和为某一值的路径 题目描述 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定...

  • Leetcode 112 路径总和

    路径总和 题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于...

  • 05-29:递归专题

    1、二叉树中是否存在节点和为指定值的路径 https://www.nowcoder.com/practice/50...

  • 路径总和

    题目 难度级别:简单 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相...

  • 112. 路径总和

    题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和...

  • 路径总和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 说明:...

  • LeetCode 112. 路径总和

    题目 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。 ...

  • 28路径总和

    给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明: ...

网友评论

      本文标题:判断二叉树中是否存在和为某值的路径&打印这些路径

      本文链接:https://www.haomeiwen.com/subject/habbxqtx.html