1. 程式人生 > >完全二叉樹的判斷

完全二叉樹的判斷

判斷一棵樹是否為完全二叉樹

1)用遞迴演算法寫,左子樹的層數永遠和右子樹的層數永遠相同或者左子樹層數比右子樹層數一為完全二叉樹,後經檢驗發現,某些二叉樹滿足要求但卻不滿足完全二叉樹的要求,還需要考慮倒數第二層幾個結點均只有左孩子的情況,這樣一來,需要討論的情況較多,考慮採用其他演算法

2)參考層序遍歷的演算法,利用佇列作為儲存結構,將二叉樹從上到下,從左到右遍歷,對於完全二叉樹來說,一旦佇列中讀到空指標,則必定已將二叉樹遍歷完全了,否則若空指標後還有為訪問的元素,則不是完全二叉樹,程式碼如下

//判斷是否為完全二叉樹
Status judge_completeBiTree(BiTree T){
	if(!T) return OK;
	SqQueue Q;
	BiTree p;
	p=T;
	InitQueue(&Q);//初始化佇列
	EnQueue(&Q,p);//根結點入隊
	while(!QueueEmpty(Q)){
		DeQueue(&Q,&p);
		if(!p) break;//讀到空指標則停止迴圈
		EnQueue(&Q,p->lchild);//左孩子入隊
		EnQueue(&Q,p->rchild);//右孩子入隊
	}
	while(!QueueEmpty(Q)){//檢查此時佇列中是否還有未訪問到的結點
		DeQueue(&Q,&p);
		if(p) return FALSE;
	}
	return TRUE;
}