剑指Offer-树-面试题55-2:平衡二叉树

CONTENT


输入一棵二叉树,判断该二叉树是否是平衡二叉树。

平衡二叉树:平衡二叉树的提出就是为了保证树不至于太倾斜,尽量保证两边平衡。因此它的定义如下:
(1)平衡二叉树要么是一棵空树
(2)要么保证左右子树的高度之差不大于 1
(3)子树也必须是一颗平衡二叉树

思路

(1)需要注意是左右子树中的高度差,即分别为左右两个子树中的最长路径(图2所示);而不是左右子树中的两条路径差(图1所示的错误)。
在这里插入图片描述
(2)解法1——直接解法,就是递归计算每一个结点的左右子树的深度,然后比较进行计算是否超过1的高度差。但是底层的结点被遍历了多次,不是最优解法。
(3)

解法1

nowcoder的AC
提交时间:2020-01-14 , 语言:Java ,运行时间: 35 ms ,占用内存:9492K ,状态:答案正确

import java.lang.Math;
 
public class Solution {
    public boolean IsBalanced_Solution(TreeNode root) {
        if(root == null){
            return true;
        }
        int left = TreeDepth(root.left);
        int right = TreeDepth(root.right);
        int diff = left-right;
        if(diff>1 || diff<-1){
            return false;
        }
         
        return IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);
    }
     
     //carculate the depth
    int TreeDepth(TreeNode node){
        if(node == null){
            return 0;
        }
         
        int left = TreeDepth(node.left);
        int right = TreeDepth(node.right);
        // left subtree length
        return Math.max(left, right)+1;
    }
}
发布了71 篇原创文章 · 获赞 16 · 访问量 1704

猜你喜欢

转载自blog.csdn.net/Xjheroin/article/details/103975290