2016-11-05 53 views
-1

我無法理解如何接受BST並將其轉換爲列表而不使用附加或任何高級技術。例如,您將得到一個BST,每個節點都有一個數字和一個名稱(按字符串從小到大排序),並且您希望按順序輸出該BST中的項目的列表,其值爲3或某些值這些線。二進制搜索樹到列表計劃

我明白這可以遞歸地完成,但我認爲我理解這個最大的問題與左右節點的分裂有關,因爲你對這兩個節點都使用遞歸,但是你不知怎的必須把它們一起列入最終名單。

任何幫助理解這一點表示讚賞,謝謝你提前。

回答

0

這個問題的簡短答案是:你是對的,你需要append。好消息是,(如果你正在做這項工作),你可以輕鬆實現你自己的append。如果你沒有將這作爲一項任務的一部分......只需直接使用append

0

所以想象你有一個值爲(1 2 3 4)的二叉樹。你知道你不能cons1 unles你已經有(2 3 4)等,所以實際上你需要積累他們倒過來。

在一個二叉搜索樹中,遍歷是左邊的這個值,右邊是使用cons做一個清單的右邊,這個節點是左邊。

(define (tree->list tree) 
    (let rec ((tree tree) (lst '())) 
    (if (tree-null? tree) 
     lst 
     (rec (tree-left tree) 
      (cons (tree-value tree) 
        (rec (tree-right tree) lst)))))) 

它可能不像它第一次做正確的一面,但請記住,一個過程需要評估了它的參數才能應用本身。

你如何實現你的樹的數據結構沒有提到,所以我只是做了一些程序。最終的結果真的沒關係。