zoukankan      html  css  js  c++  java
  • [LeetCode] 110. Balanced Binary Tree ☆(二叉树是否平衡)

    Balanced Binary Tree

    【数据结构和算法】全面剖析树的各类遍历方法

    描述

    解析

    递归分别判断每个节点的左右子树

    该题是Easy的原因是该题可以很容易的想到时间复杂度为O(n^2)的方法。即按照定义,判断根节点左右子树的高度是不是相差1,递归判断左右子树是不是平衡的。

    根据深度判断左右子树是否平衡

    在计算树的高度的同时判断该树是不是平衡的。

    即,先判断子树是不是平衡的,若是,则返回子树的高度;若不是,则返回一个非法的数字,如负数。

    当一个节点是左右子树有一个不是平衡二叉树则不必继续计算,直接返回false;当左右子树都是平衡时,再比较两个子树的高度是否相差1。若不是,则返回false,否则返回该节点的高度。

    代码

    递归分别判断每个节点的左右子树

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

    根据深度判断左右子树是否平衡

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public boolean isBalanced(TreeNode root) {
            return height(root) != -1;
        }
        private int height(TreeNode node){
            if(null == node)
                return 0;
            int left = height(node.left);
            if(left == -1)
                return -1;
            int right = height(node.right);
            if(right == -1)
                return -1;
            if(Math.abs(left - right) > 1)
                return -1;
            return Math.max(left, right) + 1;
        }
    }
  • 相关阅读:
    [POJ 2096] Collecting Bugs
    [POJ 3774] Scout YYF I
    [HDU 4418] Time travel
    [hdu 4586] Play the Dice
    [HDU 4507] 吉哥系列故事――恨7不成妻
    [HDU 4734] F(x)
    [Codeforces] Round #352 (Div. 2)
    刷题向》关于一道像差分约束的数学题BZOJ1045(NORMAL)
    刷题向》关于一道奇怪的贪心(田忌赛马)BZOJ1034(NORMAL-)
    刷题向》关于线段树的区间开根号 BZOJ3211(NORMAL+)
  • 原文地址:https://www.cnblogs.com/fanguangdexiaoyuer/p/10615519.html
Copyright © 2011-2022 走看看