zoukankan      html  css  js  c++  java
  • 判断一棵树是否是完全二叉树

    完全二叉树:每层结点都完全填满,在最后一层上如果不是满的,则只缺少右边的若干结点。
    如果一个节点有右孩子没有左孩子,直接返回false。(判断条件1)
    如果一个节点不是左右两个孩子都全(有左没右或左右都没有),则开启阶段,此时其余节点全是叶节点。(判断条件2)
    否则不是完全二叉树。
    public class IsCBT {
    public static class Node{
    public int value;
    public Node left;
    public Node right;
    public Node(int data){
    this.value = data;
    }
    }
    public static boolean isCBT(Node head){
    if(head==null){
    return true;
    }
    Queue<Node> queue = new LinkedList<>();
    boolean leaf = false;
    Node left = null;
    Node right = null;
    queue.offer(head);
    while (!queue.isEmpty()){
    head = queue.poll();
    left = head.left;
    right = head.right;
    if((right!=null&&left==null)||(leaf&&(left!=null||right!=null))){
    return false;
    }
    //前半句的意思是如果右孩子存在,左孩子不存在,返回false
    //后半句的意思是当开启阶段,如果左右孩子都不为空,返回false.
    if(left!=null){
    queue.offer(left);
    }
    if (right!=null){
    queue.offer(right);
    }
    if(left==null||right==null){ //当有一个节点左孩子或右孩子为空时,开启阶段。
    leaf = true;
    }
    }
    return true;
    }
    }
    总结:找好判断条件,则问题迎刃而解。
  • 相关阅读:
    nginx基础系列
    常用MS-SQL写法整理
    Spring Bean装配方式
    sql获取该周的开始结束日期
    Docker基础入门实践
    vim常规操作
    基于CentOS的SSHD服务的Docker镜像
    RedisClient For .Net
    Redis数据类型及使用场景
    CentOS下安装Redis
  • 原文地址:https://www.cnblogs.com/liuwentao/p/9392727.html
Copyright © 2011-2022 走看看