笔者在数据结构实验时进行该实现,二叉树是否为彻底二叉树断定方法,主要即是观察二者的差异,彻底二叉树本质:具备插入限制性,即在二叉树的实现基础上,须要知足除了最后一层以外,每层均满,既二叉树的倒数第三层及之上,每层均有左右结点,倒数第二层,对于一个节点的延申,只有有左节点的时候才能有右节点,对于不一样节点,后一个结点能够拥有左节点的条件是前面全部结点的毒均为二。故将此条件简化代码化,来进行彻底二叉树的判断 数据结构
public boolean isCompleteTree() {this
LinkedQueue<BinaryNode<T>> a = new LinkedQueue<BinaryNode<T>>(); //选择按层次遍历依次判断是否知足彻底二叉树的条件队列
BinaryNode<T> b = this.root; 基础
int haveright=0; //表示是否拥有右结点,1表示拥有右结点二叉树
while(b!=null) {遍历
if (b.left == null & b.right != null) { //用于判断该结点是否知足只有有左孩子的时候才能够拥有右结点的条件,不知足确定不为彻底二叉树方法
return false;数据
}while
if(haveright==0&b.left!=null&b!=root) { //除了根节点之外,haveright表示上一个队列的结点是否有右结点,上一个结点没有右结点这个结点有左结点不知足条件let
return false;
}
haveright = 0; //默认该结点无右孩子
if (b.left != null) {
a.add(b.left);
}
if (b.right != null) {
a.add(b.right);
haveright = 1; //有右孩子改之为1
}
b = a.poll(); //取出队列的首元素
}
return true; //若是遍历以后均和要求,则其为彻底二叉树
}
灵感来自二叉树的层次遍历