判断完全二叉树
Posted 鸟随二月
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断完全二叉树相关的知识,希望对你有一定的参考价值。
思路:层序遍历二叉树
如果一个结点,左右孩子都不为空,则pop该节点,将其左右孩子入队列
如果一个结点,左孩子为空,右孩子不为空,则该树一定不是完全二叉树
如果一个结点,左孩子不为空,右孩子为空;或者左右孩子都为空,则该节点之后的队列中的结点都为叶子节点;该树才是完全二叉树,否则返回false。
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<Node>();
boolean leaf = false;
Node l = null;
Node r = null;
queue.offer(head);
while (!queue.isEmpty())
head = queue.poll();
l = head.left;
r = head.right;
if ((leaf && (l != null || r != null)) || (l == null && r != null))
return false;//当前结点不是叶子结点且之前结点有叶子结点 || 当前结点有右孩子无左孩子
if (l != null)
queue.offer(l);
if (r != null)
queue.offer(r);
else
leaf = true;//无孩子即为叶子结点
return true;
以上是关于判断完全二叉树的主要内容,如果未能解决你的问题,请参考以下文章