• 25:二叉树中和为某一个定值的路径


    import java.util.ArrayList;
    /**
     * 面试题25:二叉树中和为某一个定值的路径
     * 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
     * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
     */
    public class _25_binary_tree_path {
        public static void main(String[] args) {
            Solution25 solution25 = new Solution25();
            TreeNode25 treeNode25 = new TreeNode25(10);
            treeNode25.left = new TreeNode25(5);
            treeNode25.right = new TreeNode25(12);
            treeNode25.left.left = new TreeNode25(4);
            treeNode25.left.right = new TreeNode25(7);
    
            ArrayList<ArrayList<Integer>> al = solution25.FindPath(treeNode25, 22);
            for (ArrayList<Integer> p : al) {
                for (Integer pIn : p) {
                    System.out.print(pIn + "、");
                }
                System.out.println();
            }
        }
    }
    class Solution25 {
        ArrayList<ArrayList<Integer>> al = new ArrayList<ArrayList<Integer>>();
        public ArrayList<ArrayList<Integer>> FindPath(TreeNode25 root, int target) {
            if (root == null) {
                return al;
            }
            ArrayList<Integer> list = new ArrayList<Integer>();
            getSumTree(root, target, 0, list);
            return al;
        }
        public void getSumTree(TreeNode25 root, int target, int tmpSum, ArrayList<Integer> list) {
            tmpSum += root.val;
            list.add(root.val);
            //如果是叶子结点,并且路径上结点的和等于目标值
            boolean isLeaf = root.left == null && root.right == null;
            if (tmpSum == target && isLeaf) {
                al.add(new ArrayList<Integer>(list)); //这里要注意呀
            }
            //如果不是叶子结点则遍历它的孩子结点
            if (root.left != null) {
                getSumTree(root.left, target, tmpSum, list);
            }
            if (root.right != null) {
                getSumTree(root.right, target, tmpSum, list);
            }
            //左右子树都为空,且和不等于目标值。栈弹出
            if (!list.isEmpty()) {
                list.remove(list.size() - 1);
            }
        }
    }
    class TreeNode25 {
        int val = 0;
        TreeNode25 left = null;
        TreeNode25 right = null;
        public TreeNode25(int val) {
            this.val = val;
        }
    }
    
  • 相关阅读:
    2.1 ArrayList 线程不安全,LinkedList 线程不安全,Vector 线程安全
    Mybatis详解(二)--动态代理(未集成Spring)
    3.2经典垃圾收集器
    3.垃圾收集器与内存分配
    6.类文件结构(Class结构)
    7.类加载机制
    spark实现从hbase中批量查询多个rowKey
    spark实现分页查询hbase
    查询mysql数据库的表名,主键
    redis退出异常:ERR Errors trying to SHUTDOWN. Check logs.
  • 原文地址:https://www.cnblogs.com/andy-zhou/p/6549627.html
Copyright © 2020-2023  润新知