1. 程式人生 > >資料結構——判斷二叉樹是否為完全二叉樹

資料結構——判斷二叉樹是否為完全二叉樹

該方法採取層次遍歷(回憶層次遍歷的實現需要藉助一個佇列,一邊進隊一邊出隊,在出隊的同時對結點進行visit())

對於完全二叉樹來說,當訪問到空結點時說明該樹已經完結,之後佇列中也將一直為空。

但非完全的二叉樹在空結點之後仍有可能出現數據。

根據這個不同,只需正常層次遍歷,在出隊遇到NULL時,開始檢測後邊的隊伍中是否有非空結點,知道整個佇列結束(front==rear),若出現則說明樹不完全

bool IsComplete(BiTree T){//完全二叉樹返回TRUE,即1
	BiTree p;//游標
	InitQueue(Q);
	if(!T)
		return 1;//若樹為空,也視作完全
	EnQueue(Q,T);//把根結點入隊;
	while(!IsEmpty(Q)){
		DeQueue(Q,p);
		if(p){
			EnQueue(Q,p->lchild);
			EnQueue(Q,p->rchild);
		}//層次遍歷,上下左右依次入隊
		else//進到else則隊中這一空格空了,可能是樹完了,也可能是該空對應的父節點並沒有這個孩子。前者是完全,後者不是,開始驗證
			while(!IsEmpty(Q)){
				DeQueue(Q,p);//這次出的已經是剛才的後一個元素了
				if(p)//一旦之後還存在結點,則說明不完全
					return 0;
			}
	}//while
}