[英]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.