二叉樹創建和遍歷詳細分析

對於二叉樹,原來始終不明白用遞歸前序創建,前序遍歷究竟是怎麼回事,今天晚上好好琢磨了下。

兩種不同的方法:

1、可以考慮把遞歸調用的函數考慮爲調用不同的函數,方便分析。

2,如果考慮爲調用同一個函數時,遞歸是用棧來實現的,用棧來分析的話就比較方便。




對於如圖所示的一個二叉樹,前序創建時的代碼爲:

/**
  * @brief     遞歸前序創建二叉樹
  * @attention 按前序輸入二叉樹中結點的值,#表示空樹,構造二叉鏈表表示二叉樹T
  */
int preCreateBiTree(BiTNode *&T)
{
	char ch;
	scanf("%c", &ch);
	if ( ch == '#' )
		T = NULL;
	else {
		T = (BiTNode *)malloc(sizeof(BiTNode));
		T->data = ch;
		preCreateBiTree(T->lchild);
		preCreateBiTree(T->rchild);
	}
}
我們鍵盤輸入爲字符串"ABD###CF##G##"。

用第一種方法分析時:


用第二種方法分析時:創建左子樹遞歸調用preCreateBiTree(T->lchild)時,依次入棧爲A、B、D,然後依次D、B、A出棧。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章