如何创建一个运行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))
答案 0 :(得分:1)
关于你的问题,有一些可疑的事情:
+
不应该是字符串但假设这真的是你想要的,这是一个简单的列表遍历:
(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)