zoukankan      html  css  js  c++  java
  • 二叉树权值最大的叶子节点到权值最小的叶子节点的距离

    有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。 给定二叉树的根节点root,请返回所求距离。

    真是醉了,看漏了叶子节点。

    代码:

     1 import java.util.*;
     2  
     3 /*
     4 public class TreeNode {
     5     int val = 0;
     6     TreeNode left = null;
     7     TreeNode right = null;
     8     public TreeNode(int val) {
     9         this.val = val;
    10     }
    11 }*/
    12 public class Tree {
    13      
    14     private TreeNode maxNode;
    15     private TreeNode minNode;
    16      
    17     private boolean stop = false;
    18     private int result;
    19      
    20     public int getDis(TreeNode root) {
    21         if(root == null) {
    22             return 0;
    23         }
    24          
    25         maxNode = root;
    26         minNode = root;
    27          
    28         getMaxAndMin(root);
    29         getMaxLength(root);
    30         return result;
    31     }
    32      
    33     private int[] getMaxLength(TreeNode root) {
    34          
    35         if(root == null)
    36             return new int[] {-1, -1};
    37         if(root == maxNode)
    38             return new int[] {0, -1};
    39         if(root == minNode)
    40             return new int[] {-1, 0};
    41          
    42         int[] left = getMaxLength(root.left);
    43         int[] right = getMaxLength(root.right);
    44          
    45         int[] curResult = new int[]{Math.max(left[0], right[0]), Math.max(left[1], right[1])};
    46          
    47         if(curResult[0] != -1)
    48             curResult[0]++;
    49         if(curResult[1] != -1)
    50             curResult[1]++;
    51          
    52         if(!stop && curResult[0] != -1 && curResult[1] != -1) {
    53             result = curResult[0] + curResult[1];
    54             stop = true;
    55         }
    56          
    57         return curResult;
    58     }
    59      
    60     private void getMaxAndMin(TreeNode root) {
    61         
    62         if(root == null)
    63             return;
    64         if(root.left == null && root.right == null) {
    65             if(root.val < minNode.val) {
    66                 minNode = root;    
    67             } 
    68             if(root.val > maxNode.val) {
    69                 maxNode = root;    
    70             }
    71         }
    72         getMaxAndMin(root.left);
    73         getMaxAndMin(root.right);
    74         
    75     }
    76 }
  • 相关阅读:
    js模块化历程
    夜深
    出差(六)开会
    高情商的十大典型表现
    出差(五)调整
    HighCharts简单应用
    出差(四)适应
    出差(三)尝试
    出差(二)熟悉
    ZTree简单应用
  • 原文地址:https://www.cnblogs.com/dsj2016/p/5791300.html
Copyright © 2011-2022 走看看