簡體   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