2014-11-21 32 views
-1

如何創建一個運行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))

回答

1

有關於你的問題了幾個可疑的東西:

  • 操作+不應該是一個字符串
  • 你表達你的列表的方式,實際上是符號空,而不是空列表
  • 你的元素並不一致表示爲(父親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)