zoukankan      html  css  js  c++  java
  • 平衡二叉树和完全二叉树的判断

    平衡二叉树

    概念:可以是空树。 假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过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;
    }
    
  • 相关阅读:
    Angular2使用boostrap和ng-bootstrap总结
    Java
    Java
    Java 13
    Java 12
    Java 11
    Java 9
    Java 8- Java 分支结构
    Java 7-Java 循环结构
    Java 6- Java 运算符
  • 原文地址:https://www.cnblogs.com/gemine/p/14848342.html
Copyright © 2011-2022 走看看