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.

    【说明】

    不是非常难,思路大家可能都会想到用递归,分别推断左右两棵子树是不是平衡二叉树,假设都是而且左右两颗子树的高度相差不超过1。那么这棵树就是平衡二叉树。

    【比較直观的Java代码】

    /**
     * Definition for binary tree
     * 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;
            }
            if(root.left==null && root.right==null){
                return true;
            }
            if(Math.abs(depth(root.left)-depth(root.right)) > 1){
                return false;
            }
            return isBalanced(root.left) && isBalanced(root.right);
        }
        
        public int depth(TreeNode root){
            if(root==null){
                return 0;
            }
            return 1+Math.max(depth(root.left), depth(root.right));
        }
    }

    【改进后】

    /**
     * Definition for binary tree
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    public class Solution {
        public boolean isBalanced(TreeNode root) {
            height(root);
            return run(root);
        }
        
        public boolean run(TreeNode root) {
            if (root == null) return true;
            
            int l = 0, r = 0;
            if (root.left != null) l = root.left.val;
            if (root.right != null) r = root.right.val;
            if (Math.abs(l - r) <= 1 && isBalanced(root.left) && isBalanced(root.right)) return true;
            
            return false;
        }
        
        public int height(TreeNode root) {
            if (root == null) return 0;
            root.val = Math.max( height(root.left), height(root.right) ) + 1; 
            return root.val;
        }
    }

    利用了TreeNode结构中的val,用它来记录以当前结点为根的子树的高度,避免多次计算。


  • 相关阅读:
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    Security and Cryptography in Python
    《EffectiveJava中文第二版》 高清PDF下载
    《MoreEffectiveC++中文版》 pdf 下载
    《啊哈c语言》 高清 PDF 下载
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6781025.html
Copyright © 2011-2022 走看看