平衡二叉树

作者: windUtterance | 来源:发表于2020-06-06 10:43 被阅读0次

    题目描述
    给定一个二叉树,判断它是否是高度平衡的二叉树。

    本题中,一棵高度平衡二叉树定义为:

    一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

    示例
    给定二叉树 [3,9,20,null,null,15,7]

    3
    / \
    9 20
    / \
    15 7
    思路是对二叉树做先序遍历,从下到上返回子树最大高度,做判断某子树不是平衡树则进行剪枝,直接向上返回。
    算法流程:
    递归返回值:
    1.当节点root的左右子树高度差< 2,则返回以节点root为根节点的子树最大高度,即节点的左右子树的最大高度加1;
    2.当节点root的左右子树高度差> 2,则表明此树不是平衡树,直接返回-1;
    终止条件:
    1.当越过叶子节点时,返回高度0;
    2.当子树高度等于-1时,表明子树不是平衡树,直接返回-1
    复杂度分析:
    时间复杂度:O(N),N为树的节点数,最差情况下需要遍历树的所有节点
    空间复杂度:O(N),最差情况下树退化为链表时,递归需要O(N)的栈空间
    Java代码

    /**
     * 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 recur(root) != -1;
        }
    
        private static int recur(TreeNode root) {
            if(root == null) return 0;
            int left = recur(root.left);
            if(left == -1) return -1;
            int right = recur(root.right);
            if(right == -1) return -1;
            return Math.abs(right - left) < 2 ? Math.max(left, right) + 1 : -1;
        }
    }
    

    相关文章

      网友评论

        本文标题:平衡二叉树

        本文链接:https://www.haomeiwen.com/subject/wnwwzhtx.html