[英]Scheme/Racket Operations in Binary tree (+, -, *, /)
我如何制作一個可以操作2個二叉樹的函數? 例如,如果運算為“ +”,則結果樹的每個節點的n-esim數將是第一棵樹的n-esim數與第二棵樹的n-esim數之和。每個節點的結構(如果節點是列表,則總和將是列表,如果節點是數字,則結果將是數字,依此類推)。
這是一個例子:
(operate "+" ’((1 2)((2 3) null null) null) ’((0 2)((1 4) null null) null))
返回應該是:
’((1 4) ((1 7) null null) null)
注意:表示形式為(Father (leftSon)(rightSon))
關於您的問題有一些可疑之處:
+
不應為字符串 但是假設這確實是您想要的,這是一個簡單的列表遍歷:
(define (operate fun sxp1 sxp2)
(cond
((null? sxp1) sxp1) ; the real empty list
((eq? 'null sxp1) sxp1) ; the symbol null
((pair? sxp1) (cons (operate fun (car sxp1) (car sxp2))
(operate fun (cdr sxp1) (cdr sxp2))))
(else (fun sxp1 sxp2)))) ; atom => apply fun to elements
測試:
> (operate + '((1 2) ((2 3) null null) null) '((0 2) ((1 4) null null) null))
'((1 4) ((3 7) null null) null)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.