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

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

    解题思路:

    路径问题一般用回溯法+递归偏多,当这条路径到底如果还没发现,就删除最后一个节点。

     1 import java.util.ArrayList;
     2 /**
     3 public class TreeNode {
     4     int val = 0;
     5     TreeNode left = null;
     6     TreeNode right = null;
     7 
     8     public TreeNode(int val) {
     9         this.val = val;
    10 
    11     }
    12 
    13 }
    14 */
    15 public class Solution {
    16     ArrayList<ArrayList<Integer>> res = new ArrayList<>();
    17     ArrayList<Integer> path = new ArrayList<>();
    18     public ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {
    19         if (root == null) {
    20             return res;
    21         }
    22         findPath(root, target);
    23         return res;
    24     }
    25      
    26     public void findPath(TreeNode root, int target) {
    27         //因为FindPath中和 下面程序中都进行了判null操作,root绝对不可能为 null
    28         path.add(root.val);
    29         //已经到达叶子节点,并且正好加出了target
    30         if (root.val == target && root.left == null && root.right == null) {
    31             //将该路径加入res结果集中
    32             res.add(new ArrayList(path));
    33         }
    34         //如果左子树非空,递归左子树
    35         if (root.left != null) {
    36             findPath(root.left, target - root.val);
    37         }
    38         //如果右子树非空,递归右子树
    39         if (root.right != null) {
    40             findPath(root.right, target - root.val);
    41         }
    42         //无论当前路径是否加出了target,必须去掉最后一个,然后返回父节点,去查找另一条路径,最终的path肯定为null
    43         path.remove(path.size() - 1);
    44         return;
    45     }
    46 }
  • 相关阅读:
    少用 if 进行普通意义上的参数验证
    到底差在了什么地方:Cs>MUTEX>Monitor>WaitHandle
    SQL Server 中的事务和锁(三)Range SU,XX 以及死锁
    练习:自己动手实现一个轻量级的信号量(二)
    让人崩溃的一上午
    我所犯的几个愚蠢错误(一)
    一个系列 之二
    练习:自己动手实现一个轻量级的信号量(一)
    Delphi的DirectShow开发概述
    xvid的中文简介
  • 原文地址:https://www.cnblogs.com/wangyufeiaichiyu/p/10877796.html
Copyright © 2011-2022 走看看