繁体   English   中英

二叉树中的方案/球拍操作(+,-,*,/)

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

关于您的问题有一些可疑之处:

  • 操作+不应为字符串
  • 表示列表的方式, null实际上是符号 null而不是空列表
  • 您的元素没有一致地表示为(父亲leftSon rightSon)
  • 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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM