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;
    }
    
  • 相关阅读:
    Session共享的解决方案
    用IIS配置反向代理
    authorization配置
    git之https或http方式设置记住用户名和密码的方法
    微信分享接口
    为你的Visual Studio单独设置代理服务器
    HTTP错误404.13
    MVC5的AuthorizeAttribute详解
    【MVC5】画面多按钮提交
    PetaPoco dynamic
  • 原文地址:https://www.cnblogs.com/gemine/p/14848342.html
Copyright © 2011-2022 走看看