zoukankan      html  css  js  c++  java
  • Leetcode 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.


    解题思路:

    递归地计算每个节点的左右子树深度,看其是否平衡。

    计算左右子树深度可参考Maximum Depth of Binary Tree 的递归解法。


     Java code:

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isBalanced(TreeNode root) {
            if(root == null) {
                return true;
            }
            int diff = maxDepth(root.left) - maxDepth(root.right);
            if(diff > 1 || diff < -1 ) {
                return false;
            }
            return isBalanced(root.left) && isBalanced(root.right);
        }
        
        public int maxDepth(TreeNode root) {
            //use recursion
            if(root == null) {
                return 0;
            }
            int leftmax = maxDepth(root.left);
            int rightmax = maxDepth(root.right);
            return Math.max(leftmax, rightmax) + 1;   
        }
    }

    20160607  time complexity: O(nlgn)

    public class Solution {
        public boolean isBalanced(TreeNode root) {
            //time complexity: O(nlgn)
            //base case
            if (root == null) {
                return true;
            }
            
            int leftHeight = getHeight(root.left);
            int rightHeight = getHeight(root.right);
            if (Math.abs(leftHeight - rightHeight) > 1) {
                return false;
            }
            return isBalanced(root.left) && isBalanced(root.right);
        }
        
        private int getHeight(TreeNode root) {  //time complexity: O(n)
            if (root == null) {
                return 0;
            }
            return Math.max(getHeight(root.left), getHeight(root.right)) + 1;
        }
    }

    Reference:

    1. http://www.cnblogs.com/infinityu/archive/2013/05/11/3073411.html

  • 相关阅读:
    linux常用命令
    Python 父类调用子类方法
    import win32api 安装pip install pypiwin32
    Python 封装DTU-215码流卡 第一天
    git apply -v 提示 Skipped patch 打不上patch的解决办法
    2019/10/29
    12/9/2019
    11/9/2019
    9/7/2019
    人生若有命中注定
  • 原文地址:https://www.cnblogs.com/anne-vista/p/4812005.html
Copyright © 2011-2022 走看看