zoukankan      html  css  js  c++  java
  • FB面经Prepare: Find Longest Path in a Multi-Tree

    给的多叉树, 找这颗树里面最长的路径长度 

    解法就是在子树里面找最大的两个(或一个,如果只有一个子树的话)高度加起来。

    对于每一个treenode, 维护它的最高的高度和第二高的高度,经过该点的最大路径就是:  最高高度+第二高高度,然后return 最高高度

     1 package fbPractise;
     2 
     3 import java.util.*;
     4 
     5 class TreeNode {
     6     int val;
     7     List<TreeNode> children;
     8     public TreeNode(int value) {
     9         this.val = value;
    10         this.children = new ArrayList<TreeNode>();
    11     }
    12 }
    13 
    14 
    15 public class LongestPathInTree {
    16     static int maxLen = 0;
    17     
    18     public static int findLongestPath(TreeNode node) {
    19         findMaxPath(node);
    20         return maxLen;
    21     }
    22     
    23     public static int findMaxPath(TreeNode node) {
    24         if (node == null) return 0;
    25         int heightest1 = 0;
    26         int heightest2 = 0;
    27         
    28         for (TreeNode child : node.children) {
    29             int childHeight = findMaxPath(child);
    30             
    31             if (childHeight > heightest1) {
    32                 heightest2 = heightest1;
    33                 heightest1 = childHeight;
    34             }
    35             else if (childHeight > heightest2) {
    36                 heightest2 = childHeight;
    37             }
    38         }
    39         maxLen = Math.max(maxLen, 1 + heightest1 + heightest2);
    40         return 1 + heightest1;
    41     }
    42     
    43     
    44     public static void main(String[] args) {
    45         TreeNode node1 = new TreeNode(1);
    46         TreeNode node2 = new TreeNode(2);
    47         TreeNode node3 = new TreeNode(3);
    48         TreeNode node4 = new TreeNode(4);
    49         TreeNode node5 = new TreeNode(5);
    50         TreeNode node6 = new TreeNode(6);
    51         node1.children.add(node2);
    52         node1.children.add(node3);
    53         node2.children.add(node4);
    54         node2.children.add(node5);
    55         node5.children.add(node6);
    56         
    57         int res = findLongestPath(node1);
    58         System.out.println(res);
    59     }
    60     
    61     
    62 }
  • 相关阅读:
    传参问题-HttpMessageNotReableException
    排序03-简单排序法
    排序02-直接插入排序法
    排序01-冒泡排序法
    书摘
    CS229
    SLAM学习笔记
    形态学图像处理
    SLAM学习笔记
    SLAM学习笔记
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/6404104.html
Copyright © 2011-2022 走看看