平衡二叉树和完全二叉树的判断

平衡二叉树

概念:可以是空树。 假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过1。

判断代码

public boolean IsBalanced_Solution(TreeNode root) {
        if (root == null) return true;
        return 
          Math.abs(height(root.left)-height(root.right)) <= 1 //保证高度之差不超过1
                && IsBalanced_Solution(root.left) && IsBalanced_Solution(root.right);//保证左右子树都是平衡二叉树
}

public int height(TreeNode root) {
       if (root == null) return 0;
       return Math.max(height(root.left),height(root.right)) + 1;
}

完全二叉树

概念:从根往下数,除了最下层以外所有的节点都是全满(都有两个子节点),并且最下层所有叶结点都向左边靠拢填满。
public boolean isCompleteTree(TreeNode root) {
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        boolean reachedEnd = false;
        while(!q.isEmpty()){
            TreeNode cur = q.poll();
            //第二步,出现了空节点以后,不能在出现非空节点了。
            if(reachedEnd && cur != null){
                return false;
            }
            //第一步出现了空节点了。
            if(cur == null){
                reachedEnd = true;
                continue;
            }
            q.offer(cur.left);
            q.offer(cur.right);
        }
        return true;
}
posted @ 2021-06-04 09:59  数月亮  阅读(502)  评论(0编辑  收藏  举报