2015-04-12 61 views
-5

我得到了一個練習來找到Scheme中二叉樹的路徑。 基本上,它就像在Scheme中查找從根到樹葉的所有路徑。 但不是打印節點的值,我們必須打印到葉子的方式。 (打印:右前左左右)二叉樹中的方案路徑

+0

請參閱下面的答案,以獲取有關如何改進此問題的指導 – Peaches491

+0

Hama,您是否有任何代碼表明您已在解決此問題上做出了任何努力? –

+0

提示:添加一個包含「到目前爲止的路徑」的函數參數。 – molbdnilo

回答

0

如果您正在討論尋找從根到特定葉的路徑,您可以基本上以遞歸方式搜索您的樹,並且在做這些時應該將一個列表作爲參數傳遞給您的搜索函數跟蹤已經採用的路徑,並且您的搜索功能應返回路徑列表。

例如,假設您在樹中搜索L,您需要檢查L是在左側還是右側的子樹中。發現其中L位於您可以將方向基本上添加到您的路徑列表的子樹後,你可以這樣做

(define (search L tree) 
    (cond 
      ((null? tree) '() ) 
      ((member L leftsubtree) (cons 'left (search L leftsubtree)) 
      ((member L rightsubtree) (cons 'right (search L rightsubtree))))) 

我們做什麼。這是我們發現的子樹L位於然後添加方向(左邊或右邊)到從該子樹的父節點到L的路徑的前面。當然,如果複製並粘貼此代碼,則不起作用。所以你需要根據你的樹形表示實現這個函數,你可能需要爲你的情況實現成員函數。我希望它有幫助。

0
(define (ab-chemin-aux AB e CH) 
(if (ab-noeud? AB) 
(if (equal? e (ab-etiquette AB)) 
CH 
(or (ab-chemin-aux (ab-gauche AB) e (append CH (list "gauche"))) 
(ab-chemin-aux (ab-droit AB) e (append CH (list "droit")))))#f)) 
(define (ab-chemin AB e) 
(ab-chemin-aux AB e (list))) 

我想出了答案,但我忘了在這裏問。謝謝您的回答。希望這可以幫助某人