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;
    }
    }
    总结:找好判断条件,则问题迎刃而解。
  • 相关阅读:
    C# 学习历程——接口
    C# 学习历程——类的封装,继承与多态
    C# 学习历程——C#基础
    C# 学习历程——Hello World
    python(14)---发邮件、写日志、操作redis数据库
    python(13)——内置函数
    python(12)---导入模块
    HTML操作之DOM操作
    HTML基础之CSS
    HTML基础之HTML标签
  • 原文地址:https://www.cnblogs.com/liuwentao/p/9392727.html
Copyright © 2011-2022 走看看