boolean isCompleteBinaryTree()
判断二叉树是不是一棵完全二叉树,如果是,返回true,否则返回假。
一开始想把二叉树结点层次遍历转换成队列表示,用1表示不为null,用0表示为null,只要判断1前面有没有0就可以了,1前面有0就不为完全二叉树.后来,实现困难,故换了种方法.
public boolean IsCompleteBinaryTree() {
Deque<BiTreeNode<T>> queue = new ArrayDeque<>();
queue.offer(root);
boolean signation = false;
while(!queue.isEmpty()) {
BiTreeNode<T> t = queue.poll();
if((t.lchild == null&&t.rchild != null) ||(signation && (t.lchild!=null || t.rchild!=null))) {
return false;
}
if(t.lchild!=null) {
queue.offer(t.lchild);
}
if(t.rchild!=null) {
queue.offer(t.rchild);
}
else {
signation = true;
}
}
return true;
}
把结点放进数组,队列不为空时,取出从队列取出结点.
1.当结点没有左子树但有右子树时,跳出循环,false.既(t.lchild == null&&t.rchild != null)
2.signation表示一个状态,当t的rchild为null时,进入此状态,以后的结点要全部为叶子节点,既(t.lchild!=null || t.rchild!=null)否则就false.