二叉树(+;,-,*,/)中的Scheme/Racket操作
如何生成一个操作2个二叉树的函数?例如,如果操作为“+”,则结果树的每个节点的n-esim编号将是第一棵树的n-esim编号与第二棵树的n-esim编号的总和,考虑到每个节点的相同结构(如果节点是列表,则总和将是列表,如果节点是编号,则结果将是数字,等等) 以下是一个例子:二叉树(+;,-,*,/)中的Scheme/Racket操作,scheme,racket,Scheme,Racket,如何生成一个操作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) nu
(operate "+" ’((1 2)((2 3) null null) null) ’((0 2)((1 4) null null) null))
报税表应为:
’((1 4) ((1 7) null null) null)
注意:表示法是
(父亲(左儿子)(右儿子))
关于你的问题有一些可疑之处:
- 操作
不应是字符串+
- 在表示列表的方式中,null实际上是null符号,而不是空列表
- 您的元素不一致地表示为(父子左父子右父子)
- 2+3等于5,因此您给出的结果似乎不正确
(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)