• 二叉树中和为某一值的路径


    题目描述

    输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
     1 /**
     2  * 题目描述
     3  * 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。
     4  * 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
     5  * (注意: 在返回值的list中,数组长度大的数组靠前)
     6  */
     7 
     8 import java.util.ArrayList;
     9 
    10 public class Main24 {
    11 
    12     public static void main(String[] args) {
    13         // TODO Auto-generated method stub
    14         TreeNode root = new Main24.TreeNode(10);
    15         root.left = new TreeNode(5);
    16         root.left.left = new TreeNode(4);
    17         root.left.right = new TreeNode(7);
    18         root.left.left.left = null;
    19         root.left.right.right = null;
    20         
    21         root.right = new TreeNode(12);
    22         root.right.left = null;
    23         root.right.right = null;
    24         
    25         ArrayList<ArrayList<Integer>> result = Main24.FindPath(root, 19);
    26         System.out.println(result);
    27         
    28     }
    29     
    30     public static class TreeNode {
    31         int val = 0;
    32         TreeNode left = null;
    33         TreeNode right = null;
    34 
    35         public TreeNode(int val) {
    36             this.val = val;
    37         }
    38     }
    39     
    40     public static ArrayList<ArrayList<Integer>> FindPath(TreeNode root,int target) {    
    41         ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
    42         ArrayList<Integer> array = new ArrayList<>();
    43         int num = 0; 
    44         find(result, array, root, target, num);
    45         for(int i=result.size()-2;i>=0;i--) {
    46             for(int j=0;j<=i;j++) {
    47                 if(result.get(j+1).size()>result.get(j).size()) {
    48                     ArrayList<Integer> temp = result.get(j);
    49                     result.set(j, result.get(j+1));
    50                     result.set(j+1, temp);
    51                 }
    52             }
    53         }
    54         return result;    
    55     }
    56     
    57     public static void find(ArrayList<ArrayList<Integer>> result, ArrayList<Integer> array, TreeNode root, int target, int num) {
    58         if (root == null) {
    59             return;
    60         }
    61         boolean flag = root.left == null && root.right == null;
    62         num = num + root.val;
    63         array.add(root.val);
    64         if (num == target && flag) {
    65             ArrayList<Integer> path = new ArrayList<>();
    66             for (int i=0;i<array.size();i++) {
    67                 path.add(array.get(i));
    68             }
    69             result.add(path);
    70         }
    71         TreeNode temp = root;
    72         root = temp.left;
    73         find(result, array, root, target, num);
    74         root = temp.right;
    75         find(result, array, root, target, num);
    76         array.remove(array.size()-1);
    77     }
    78 }

    参考:https://blog.csdn.net/lawrencelan0416/article/details/89707117 谢谢大佬!

  • 相关阅读:
    KVO的用法、底层实现原理
    Runtime应用(三)实现NSCoding的自动归档和自动解档
    Runtime应用(二)使用对象关联为分类增加属性(每个对象的属性互不干扰)
    Runtime 应用(一)拦截系统自带的方法交换实现
    iOS实现传递不定长的多个参数
    Runtime 中的 _cmd、 IMP
    UIWebView、WKWebView使用详解及性能分析
    iOS
    基本图形生成算法
    关于动画中帧的解释
  • 原文地址:https://www.cnblogs.com/strive-19970713/p/11139843.html
Copyright © 2020-2023  润新知