zoukankan      html  css  js  c++  java
  • 如何判断一颗二叉树是完全二叉树

    若设二叉树的深度为k,除第k层外,其它各层(1至k-1)的节点数都达到了最大个数,第k层所有的节点都连续几种在最左边,这就是完全二叉树

     

     思路:按照宽度遍历进行改进

    1)在遍历的过程中如果存在任何一节点有右节点,无左节点,返回false

    2)在第1个条件成立的情况下,遇到了第一个左右孩子不相全的情况,则接下来遇到的所有节点都必须为叶子节点,如果是返回true,反之false

    代码实现 

    package Algorithms.tree;
    import java.util.LinkedList;
    
    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;
            }
            LinkedList<Node> queue = new LinkedList<>();
            //是否遇到左右两个孩子不双全的节点
            boolean leaf = false;
            Node l = null;
            Node r = null;
            queue.add(head); //1、先把头节点放入队列中
            while (!queue.isEmpty()) {
                head = queue.poll(); // 2、poll出一个Node
                l = head.left;
                r = head.right;
                //poll之后由打印改为判断是否为完全二叉树
                //在遇到不双全的节点后,发现当前节点不是叶子节点。或者一个节点有右节点,没有左节点,返回false
                if ((leaf && (l != null || r != null)) || (l == null && r != null)) {
                    return false;
                }
                if (l != null) { //3、对于弹出的节点,把其左右节点入队列
                    queue.add(l);
                }
                if (r != null) {
                    queue.add(r);
                } else { //如果一个节点左右孩子不双全,把leaf置true
                    leaf = true;
                }
            }
            return true;
        }
    
    }
  • 相关阅读:
    QML类型说明-ParallelAnimation
    QML基本可视化元素--Text
    qml学习笔记(二):可视化元素基类Item详解(上半场anchors等等)
    JavaScript toFixed() 方法
    FM/AM收音机原理
    Q_INVOKABLE与invokeMethod用法全解
    SQL问题(面试题)
    数组、List和ArrayList的区别
    catch/finally中不应使用 writer.flush()
    Spring AOP整理
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/15132710.html
Copyright © 2011-2022 走看看