1. 程式人生 > >二叉樹的中序遍歷-遞迴和非遞迴演算法

二叉樹的中序遍歷-遞迴和非遞迴演算法

建立二叉樹就不說了,這裡直接:

  • 中序遞迴遍歷演算法
void InOrder(BiTree T){
	if(T){
		InOrder(T->lchild);
		cout<<T->data<<" ";
		InOrder(T->rchild);
	}
}
  • 中序非遞迴遍歷演算法
void InOrder(BiTree T){
	//還是模擬上面的遍歷過程
	BiTree ptr[20];
	int top = -1;
/*下面的雙重判斷和前面的一樣,在進棧、出棧的過程中可能會出現棧空的情況,而此時的遍歷還沒有結束,
所以需要據此來維持迴圈的進行。*/
	while(T || top!=-1){
		while(T){
			ptr[++top] = T;
			T = T->lchild;
		}
		if(top!=-1){
			T = ptr[top--];
			cout<<T->data<<" ";   //輸出在出棧後
			T = T->rchild;
		} 
	} 
	
}

 -----------------------------------------------------------分割線------------------------------------------------------------------------

測試截圖:

 

作者:無涯明月

發文時間:2018-11-16