兩種不同的方法:
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出棧。