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);
        }
    }
  • 相关阅读:
    收集起来先
    asp .net 页面回车触发button 按钮事件
    关于SQL 数据库表中的聚集索引和非聚集索引等
    WinForm换肤操作(用IrisSkin2.dll)
    生成Word文档的相关操作
    API自动化测试测试数据集
    API文档实践
    使用eolinker对API测试的响应结果进行断言
    API自动化定时测试
    接口测试之对数据进行RSA加解密
  • 原文地址:https://www.cnblogs.com/lisen10/p/11209722.html
Copyright © 2011-2022 走看看