110. 平衡二叉树

110. 平衡二叉树

 

 

暂时没有想到非递归的方法,这里用递归来处理了

根据题目的定义,我们可以通过计算每一棵子树的左右高度差,

只要有一个子树不平衡,则整体不平衡(这里有个优化小细节,我们以-1为标记位,当出现-1则整棵树

不平衡,不需要再做后续判断)

时间O(n),空间O(n)

    public boolean isBalanced(TreeNode root) {
        return def(root) != -1;
    }

    private int def(TreeNode root) {
        if (root == null) return 0;
        // 递归计算左右子树的高度
        int left = def(root.left);
        if(left == -1) return -1;
        int right = def(root.right);
        if(right == -1) return -1;
        // 当左右子树高度差在2以内,则返回子树的高度(左右子树高度差+1,+1为根节点高度)
        // 左右子树高度差超过2,可以直接判断整颗树不平衡,直接返回结果
        return Math.abs(left - right) < 2 ? Math.max(left, right) + 1 : -1;
    }

 

上一篇:Qt开发经验小技巧101-110


下一篇:Photoshop制作漂亮MM永浴爱河艺术