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);
        }
    }
  • 相关阅读:
    Spring MVC常用注解
    SQL预处理
    浅析用链表实现的队列
    logrotate自动切割某一服务模板
    3种安装nginx的方法以及相关的配置文件
    一键部署NFS服务端脚本
    rsync排错
    NFS排错
    nfs客户端 一键切换 nfs高可用主机脚本
    实时监控nfs服务端是否宕机
  • 原文地址:https://www.cnblogs.com/lisen10/p/11209722.html
Copyright © 2011-2022 走看看