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

    题目描述

    输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)

            8
           / 
         6    10
        /  
    4 7 18 [8-6-4] [8-10]

    解法

    在树的前、中、后序三种遍历方式中,只有前序遍历是首先访问根结点的。

    所以要按前序的方式来遍历。

    步骤:

    1. 当用前序遍历的方式访问到某一结点时,把该结点添加到路径上,并累加该结点的值。

    2. 如果该结点为叶结点并且路径中结点的值和刚好等于输入的整数,则把它打印出来。

    3. 如果当前结点不是叶结点,则继续访问它的子结点。

    4. 当前结点访问结束后,递归回到它的父结点。

    import java.util.ArrayList;
    
    
    /**
     public class TreeNode {
     int val = 0;
     TreeNode left = null;
     TreeNode right = null;
    
     public TreeNode(int val) {
     this.val = val;
    
     }
    
     }
     */
    public class Solution {
        
        private ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    
        /**
         * 找出二叉树中和为某一值的路径(必须从根节点到叶节点)
         * 
         * @param root  二叉树的根结点
         * @param target 目标值
         * @return 结果list
         */
        public ArrayList<ArrayList<Integer>> FindPath(TreeNode root, int target) {
            findPath(root, target, new ArrayList<>());
            return res;
        }
    
        private void findPath(TreeNode root, int target, ArrayList<Integer> list) {
            if (root == null) {
                return;
            }
            list.add(root.val);
            target -= root.val;
            if (target == 0 && root.left == null && root.right == null) {
                res.add(new ArrayList<>(list));
            } else {
                findPath(root.left, target, list);
                findPath(root.right, target, list);
            }
            list.remove(list.size() - 1);
        }
    }
  • 相关阅读:
    Angular常用VSCode插件
    asp.net MVC设计模式中使用iTextSharp实现html字符串生成PDF文件
    Docker Compose部署 EFK(Elasticsearch + Fluentd + Kibana)收集日志
    强烈推荐这本书《编码:隐匿在计算机软硬件背后的语言》
    frp 内网穿透访问内网Web服务
    代码玄学——镇代码的注释
    C#基础之多线程与异步
    C#基础之事件(1)
    WPF之Unity与ServiceLocator运用
    WPF之实现控件内容拖动
  • 原文地址:https://www.cnblogs.com/lisen10/p/11209722.html
Copyright © 2011-2022 走看看