採取樹下面作爲一個例子,其中Node0
是傳遞給DisplayTree
第一PersonRec*
(右側是該節點訪問以供參考的順序):
Node0 1st
/ \ / \
Node2 Node1 5th 2nd
/ | | \ /| | \
NULL NULL NULL NULL 7th 6th 4th 3rd
- 第一個電話輸入if語句並通過
Node1
至DisplayTree
(如rChild
)
- 第二呼叫進入if語句,並傳遞
NULL
到DisplayTree
(如rChild
)
- 因爲參數是
NULL
並返回到第二呼叫(Node1
)
- 第二呼叫的第三呼叫不進入if語句現在打印
Node1
,然後傳遞到NULL
DisplayTree
(如lChild
)
- 第四打不進if語句,並返回到第二個呼叫(
Node1
)
- 第二呼叫已經完成,並返回到第一個呼叫(
Node0
)
- 第一呼叫現在打印
Node0
然後傳遞Node2
到DisplayTree
(如lChild
)
- 第五呼叫進入if語句,並傳遞
NULL
到DisplayTree
(如rChild
)
- 第六打不進if語句,並返回到第五輪(
Node2
)
- 第五呼叫現在打印
Node2
然後通過NULL
到DisplayTree
(如lChild
)
- 第七打不進if語句,並返回到第五輪(
Node2
)
- 第五調用完成並返回到第一個呼叫
- 的第一個電話已完成
編輯:用較小的示例解決您的評論。考慮一棵樹只有一個沒有孩子的節點,這次我們可以更多地關注代碼。樹是這樣的:
Node0
/ \
NULL NULL
第一次你的代碼被調用時,Node0
在傳遞if (ptr != NULL)
是true
,因此進入執行if語句。下一行DisplayTree(ptr->rChild);
使用NULL
調用該函數。在該呼叫期間,if (ptr != NULL)
是false
因此執行不會輸入if語句。結果,執行返回到先前的調用,並且下一行代碼是cout << "Name: " << ptr->name...
,它打印Node0
的信息,這就是爲什麼有輸出。該行完畢後,呼叫,DisplayTree(ptr->lChild);
也因爲它通過NULL
,然後所有的遞歸結束
它首先遍歷'rChild'(這可能意味着正確) – asimes
是的,這是正確的。右孩子第一 –