1. 程式人生 > 其它 >求二叉連結串列樹高度

求二叉連結串列樹高度

技術標籤:C演算法資料結構

非遞迴實現

基於層序遍歷思想,使用佇列操作結點,從根節點開始入隊,出隊後判斷左右子樹,如果當前結點有左右子樹則將子樹入隊,並且判斷是否訪問到這一層最右端結點,層數加1.

void Height(BiTree T){
	BiTree Q[maxsize];	//建立一個佇列儲存二叉樹型別結點
	int front =0 , rear = 0;	//初始化佇列的隊頭與隊尾
	int last=0, level=0;        //初始層數和末尾結點
	if(!T){
		return ;
	}
	BiTNode *p = T;    //設一個指標指向T進行操作
	Q[++rear] = p;     //當前結點入隊
	while(rear!=front){    //佇列非空狀態
		p = Q[front++];    //出棧時,隊頭指標後移
		if(p->lchild){     
			Q[++rear] = p->lchild;    //子節點入隊進行遞迴
		}
		if(p->rchild){
			Q[++rear] = p->rchild;
		}
		if(rear == last){        //判斷是否訪問過入棧的結點,是則表示該層遍歷結束
			level++;	last = rear;
		}
	}
	return level;
}

遞迴實現:先分別遞迴計算左、右子樹的高度,最後取最大值的層數加上根節點的層數為最終結果

	int Height(BiTree){
	    int left_Height, right_Height;
	    left_Height = Height(T->lchild);
	    right_Height = Height(T->rchild);
	    if(left_Height > right_Height){
	        return left_Height+1;		//加一個根節點
	    }else{
	    	return right_Height+1;
		}
    }