剑指Offer:二叉树中和为某一值的路径【34】

剑指Offer:二叉树中和为某一值的路径【34】

题目描述

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

题目分析

  

Java题解

package tree;

import java.util.ArrayList;
import java.util.Scanner;

public class FindPath {
    private static ArrayList<ArrayList<Integer>> pathList = new ArrayList<>();

    public static void main(String[] args) {
        TreeNode t1 = new TreeNode(1);
        TreeNode t2 = new TreeNode(2);
        TreeNode t3 = new TreeNode(3);
        TreeNode t4 = new TreeNode(4);
        TreeNode t5 = new TreeNode(5);
        TreeNode t6 = new TreeNode(3);
        t1.left=t2;
        t1.right=t3;
        t2.left=t4;
        t2.right=t5;
        t3.left=t6;
        FindPath(t1,7);
    }

    public static ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
        if(root==null)
            return pathList;
        FindPathCore(root,target,new ArrayList());
        return pathList;
    }

    public static void FindPathCore(TreeNode root,int target,ArrayList list)
    {
        if(root==null)
            return;

        list.add(root.val); //先序遍历,先把值加上

        //如果此处是叶子节点,我们再判断值
        if(root.left==null&&root.right==null)
        {
            if(target==root.val)
                pathList.add(list);
            return;
        }
        //这里要分路了
        ArrayList<Integer> list2 = new ArrayList<>();
        list2.addAll(list);
        if(root.left!=null)
            FindPathCore(root.left,target-root.val,list2);
        if(root.right!=null)
            FindPathCore(root.right,target-root.val,list);

    }
}

  

 

猜你喜欢

转载自www.cnblogs.com/MrSaver/p/9284005.html