簡體   English   中英

這種中序樹遍歷算法如何“爬上”樹呢?

[英]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處,我們再次調用遍歷1right孩子,但它又是None ,所以同樣的事情發生了。 然后在節點1處,我們已經完成了我們要求方法在if塊中執行的所有操作。 它返回到父節點節點2

這就是它的工作原理。 這張圖會解釋得很清楚:

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM