我試圖解決一個謎題,即抓取二叉樹以查找特定值是否作爲節點存在。我在評估一個看起來像'(1 '())
的對時遇到問題。我想當我評估(= 4 '())
它返回真這顯然不正確。計劃樹之謎:在最終對中表示空節點
我試圖刪除cons
添加空對,但我現在得到以下內容: (#f . #f)
我認爲這不是一對。我在阻止如何通過cons
建立配對列表。
我的代碼如下:
我自制any?
功能
(define (any? f lst) (not (null? (filter f lst))))
版本與cons
與'()
:
(define value-exist?
(lambda (n xs)
(if (null? xs)
'()
(letrec ((node-left (car xs))
(node-right (cdr xs))
(true? (lambda (x) x)))
(if (list? node-left)
(any? true? (cons (value-exist? n node-left)
(cons (value-exist? n node-right)
'())))
(any? true? (cons (= n node-left)
(cons (value-exist? n node-right)
'()))))))))
版本,我已經刪除了cons
與'()
:
(define value-exist?
(lambda (n xs)
(if (null? xs)
'()
(letrec ((node-left (car xs))
(node-right (cdr xs))
(true? (lambda (x) x)))
(if (list? node-left)
(any? true? (cons (value-exist? n node-left)
(value-exist? n node-right)))
(any? true? (cons (= n node-left)
(value-exist? n node-right)))
)))))
樣品電話:
(value-exist? 4 '(1 2 3 (3 2 3)))
謝謝。使用這種方法更有意義,因爲它似乎是解決問題最簡單的方法。再次感謝你! – Calv1n