zoukankan      html  css  js  c++  java
  • leetcode-110:判断平衡二叉树 Java

    Balanced Binary Tree

    Given a binary tree, determine if it is height-balanced.
    For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1.
    解法1:
    1.计算每个节点的高度
    2.从根节点开始从上往下遍历,判断每个节点的左右子树是否是平衡的

    缺点:每次遍历都要重新计算高度,很多节点的高度都重复计算了,时间复杂度o(n^2)

    解法2:

    从根节点开始,从上往下遍历,按照中序遍历的思想,从左右子节点向根节点遍历,一依次判断平衡状态,这样根结点可以重复利用已经计算的子节点的高度,只需要依次遍历整棵树。在遇到某个子树非平衡时,能直接结束,返回false。




    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    import java.math.*;
    public class Solution {
        public boolean isBalanced(TreeNode root) {
            if(root == null)
                 return true;
            int leftH = getHeight(root.left);
            int rightH = getHeight(root.right);
            int diff = leftH - rightH;
            if(diff>1 || diff<-1){
                return false;
            }else{
                return isBalanced(root.left) && isBalanced(root.right);
            }
            
        }
        
        int getHeight(TreeNode root){
            if(root == null){
                return 0;
            }
            return 1+Math.max(getHeight(root.left),getHeight(root.right));
        }
        
        
        /**
        public boolean isBalanced(TreeNode root) {
            if(root == null)
                return true;
                
            if(getHeight(root) == -1){
                return false;
            }else{
                return true;
            }
        }
        
        public int getHeight(TreeNode root){
            if(root == null)
                return 0;
            
            int leftH = getHeight(root.left);
            if(leftH == -1)
                return -1;
            
            int rightH = getHeight(root.right);
            if(rightH == -1)
                return -1;
                
            if(leftH-rightH > 1 || leftH-rightH < -1)
                return -1;
            
            return 1+(leftH>rightH?leftH:rightH);
            
        }
        */
    }


  • 相关阅读:
    .NET 2.0泛型集合类与.NET 1.1集合类的区别(二)
    关于插件的好文章
    MemberInfo.GetCustomAttributes和MemberDescriptor.Attributes获取特性的不同
    新一代编程语言
    .NET 2.0泛型集合类与.NET 1.1集合类的区别(一)
    发现一篇关于.NET 2.0中关于事务命名空间的好文章
    C# WinForm控件美化扩展系列之给TextBox加水印
    log4.net
    C# GDI+ 双缓冲
    C# WinForm控件美化扩展系列之ListBox
  • 原文地址:https://www.cnblogs.com/wennian/p/5036884.html
Copyright © 2011-2022 走看看