剑指offer—55_2.平衡二叉树—分析及代码(Java)

剑指offer——55_2.平衡二叉树——分析及代码[Java]

一、题目

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
在这里,我们只需要考虑其平衡性,不需要考虑其是不是排序二叉树。

二、分析及代码

1. 记录深度

(1)思路

如果某二叉树中任意节点的左、右子树的深度相差不超过 1,那么它就是一棵平衡二叉树。
可以通过记录各节点的深度避免重复递归。进一步地,对于每个节点,可以先记录其左、右子树的深度,并判断是否平衡,再计算得到其自身深度。根据这一过程特点,可以选择后序遍历的方法。

(2)代码

public class Solution {
    
    
    public boolean IsBalanced_Solution(TreeNode root) {
    
    
        return TreeDepth(root) == -1 ? false : true;
    }
     
    public int TreeDepth(TreeNode root) {
    
    
        if (root == null)
            return 0;
        int left = TreeDepth(root.left);
        int right = TreeDepth(root.right);
        if (left == -1 || right == -1 || left - right > 1 || right - left > 1)
            return -1;
        return Math.max(left, right) + 1;
    }
}

(3)结果

运行时间:11 ms,占用内存 9440 k。

三、其他

暂无。

猜你喜欢

转载自blog.csdn.net/zml66666/article/details/111561863