筆者在數據結構實驗時進行該實現,二叉樹是否爲徹底二叉樹斷定方法,主要即是觀察二者的差異,徹底二叉樹本質:具備插入限制性,即在二叉樹的實現基礎上,須要知足除了最後一層以外,每層均滿,既二叉樹的倒數第三層及之上,每層均有左右結點,倒數第二層,對於一個節點的延申,只有有左節點的時候纔能有右節點,對於不一樣節點,後一個結點能夠擁有左節點的條件是前面全部結點的毒均爲二。故將此條件簡化代碼化,來進行徹底二叉樹的判斷 數據結構
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; //若是遍歷以後均和要求,則其爲徹底二叉樹
}
靈感來自二叉樹的層次遍歷