zoukankan      html  css  js  c++  java
  • 二叉树中和为某一值的路径


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


    解题思路

    使用递归可以解决这个问题:

    • 前序递归遍历树,途中把结点加入路径
    • 如果遍历到叶子结点,则比较当前路径的和是否符合预期值
      • 符合条件,将当前路径加入结果集
      • 不符合条件,不作任何操作
    • 因为使用的是前序遍历,所以每一轮递归都会返回父结点,所以当前保存路径也应该弹出当前结点
    public class Solution {
        
        // 用来保存所有符合条件的路径
        private ArrayList<ArrayList<Integer>> listAll = new ArrayList<ArrayList<Integer>>();
        // 路径
        private ArrayList<Integer> list = new ArrayList<Integer>();
        
        public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
            if(root == null) {
                return listAll;
            }
            findPath(root, target);
            return listAll;
        }
        
        public void findPath(TreeNode node, int target) {
            // 先将当前值放入路径
            list.add(node.val);
            target -= node.val;
            // 如果当前结点已经是叶子结点,并且符合条件,则将当前路径加入结果集
            if(target == 0 && node.left == null && node.right == null) {
                listAll.add(new ArrayList<>(list));
            }
            // 继续向左子树遍历
            if(node.left != null) {
                findPath(node.left, target);
            }
            // 继续向右子树遍历
            if(node.right != null) {
                findPath(node.right, target);
            }
            // 本轮结束,从路径中弹出当前结点
            list.remove(list.size() - 1);
        }
    }
    

  • 相关阅读:
    方法永远比借口多
    node.js学习在页面上传图片并显示例子
    (转)负载大逃亡:四十二路怪兽联军及七条逃生法则
    node.js学习一例子
    node.js学习总结
    UML项目应用理解快速了解整个系统架构和详细设计文档
    position与relative的区别
    人生有四件事不可以等待
    这是我的第一篇文章
    麦咖啡8.5i 使用设置图解
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/13793465.html
Copyright © 2011-2022 走看看