[英]How can this algorithm for in-order tree traversal "climb up" the tree?
我看到很多關於樹遍歷的教程,我對有序算法究竟如何讓我們“爬上”樹感到困惑。
例如,在下面的樹中,我知道我們一直向左走,直到沒有孩子,然后我們得到 append 的值。 但是算法中的什么允許我們“向上爬”到值 2 等的節點?
我很難理解這一點。 我隨處可見的 Python 中的算法是這樣的:
def printInorder(root):
if root:
# First recur on left child
printInorder(root.left)
# then print the data of node
print(root.val),
# now recur on right child
printInorder(root.right)
那么讓我從這個角度來解釋一下。 您知道這樣一個事實,即一旦您打印了根節點,那么您需要對以左孩子為根的子樹和以右孩子為根節點的子樹進行相同的中序遍歷。
我們如何向上遍歷? 只是當我們回到遞歸調用時。 是的,它可能感覺有點奇怪,但這就是 function 調用的工作方式,一旦被調用的 function 完成,控件就會轉到父 function,然后它完成工作,控件就會轉到它的父級。
現在你問了這個問題,
是什么“告訴算法”我們訪問了節點 1 並且不再是左側的 go
它實際上在1
的左邊,基本上不再是一個節點。 它只是None
現在 function 看到你有一個if
語句說do the work only if root is not None
。 這就是這個 function 停止進一步呼叫的地方。 完成后,它會返回到它的父級,即1
。 現在在打印1
后的1
處,我們再次調用遍歷1
的right
孩子,但它又是None
,所以同樣的事情發生了。 然后在節點1
處,我們已經完成了我們要求方法在if
塊中執行的所有操作。 它返回到父節點節點2
。
這就是它的工作原理。 這張圖會解釋得很清楚:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.