剑指offer_二叉树---二叉树中和为某一值的路径

简介: 剑指offer_二叉树---二叉树中和为某一值的路径

##题目描述

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

##解题思路

1,从根节点开始,分别向左右递归寻找

2,如果当前路径值刚好相等并且刚好到达叶子节点,则把路径添加到list里

3,如果当前路径值小于目标值,就向左子树或者右子树进发

4,如果当前路径值和大于目标值或者已经找到一条路径则回到上一层

##代码

/**
 * 
 */
package offerTest;
import java.util.ArrayList;
/**
 * <p>
 * Title:FindPaths
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月20日 下午9:56:48
 */
public class FindPaths {
  ArrayList<ArrayList<Integer>> listall = new ArrayList<ArrayList<Integer>>();
  //发现路径函数
  public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
    ArrayList<Integer> list = new ArrayList<Integer>();
    if (root == null) {
      return listall;
    }
    int cursum = 0;
    return FindPath(root, target, list, cursum);
  }
    //递归调用,存储有效路径
  public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target,
      ArrayList<Integer> list, int cursum) {
    cursum += root.val;
    list.add(root.val);
    // 如果刚好相等,将该路径添加到路径集里
    if (cursum == target && root.left == null && root.right == null) {
      ArrayList<Integer> path = new ArrayList<Integer>();
      for (int i = 0; i < list.size(); i++) {
        path.add(list.get(i));
      }
      listall.add(path);
    }
    // 如果小于当前值,且左子树不为空,则向左子树进发
    if (cursum < target && root.left != null) {
      FindPath(root.left, target, list, cursum);
    }
    // 如果小于当前值,且右子树不为空,则向右子树进发
    if (cursum < target && root.right != null) {
      FindPath(root.right, target, list, cursum);
    }
    //如果当前路径值和大于目标值或者已经找到一条路径则回到上一层
    cursum -= root.val;
    list.remove(list.size() - 1);
    return listall;
  }
  public static void main(String[] args) {
    // TODO Auto-generated method stub
  }
}


相关文章
【剑指offer】-二叉树中和为某一值的路径-24/67
【剑指offer】-二叉树中和为某一值的路径-24/67
|
4月前
|
算法 Java
二叉树路径与回溯法
文章通过LeetCode第257题"二叉树路径"的解题过程,详细阐述了如何利用前序遍历和回溯法来找出二叉树中所有从根节点到叶子节点的路径,并提供了Java语言的代码实现,强调了回溯法在解决类似问题中的重要性。
二叉树路径与回溯法
代码随想录Day15 二叉树 LeetCodeT513 找树左下角的值 T112路径总和 T106 从中序和后序遍历构造二叉树
代码随想录Day15 二叉树 LeetCodeT513 找树左下角的值 T112路径总和 T106 从中序和后序遍历构造二叉树
44 0
|
算法
代码随想录Day14 LeetCodeT110平衡二叉树 T257二叉树的所有路径 T404 左叶子之和
代码随想录Day14 LeetCodeT110平衡二叉树 T257二叉树的所有路径 T404 左叶子之和
37 0
|
7月前
|
Serverless
【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)
【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)
657 0
|
存储 C++
剑指offer(C++)-JZ34:二叉树中和为某一值的路径(二)(数据结构-树)
剑指offer(C++)-JZ34:二叉树中和为某一值的路径(二)(数据结构-树)
剑指offer(C++)-JZ34:二叉树中和为某一值的路径(二)(数据结构-树)
|
算法
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
代码随想录算法训练营第十八天 | 力扣 513. 找树左下角的值、112. 路径总和、113. 路径总和 II、106. 从中序与后序遍历序列构造二叉树、105. 从前序与中序遍历序列构造二叉树
57 0
|
存储 算法 C++
剑指offer(C++)-JZ84:二叉树中和为某一值的路径(三)(数据结构-树)
剑指offer(C++)-JZ84:二叉树中和为某一值的路径(三)(数据结构-树)
剑指offer(C++)-JZ82:二叉树中和为某一值的路径(一)(数据结构-树)
剑指offer(C++)-JZ82:二叉树中和为某一值的路径(一)(数据结构-树)
剑指offer 35. 二叉树中和为某一值的路径
剑指offer 35. 二叉树中和为某一值的路径
59 0
下一篇
DataWorks