2016-03-30 6 views
1

ツリーノードの値のリストを「予約注文」の方法で返す簡単なコードを記述しようとしています。Scheme - バイナリツリー反復再帰は、何もではなく空のNodeとしてappends()を追加します。

(define pre-iter (lambda (tree) 
(if (not (pair? tree)) 
    (list tree) 
    (append (list (car tree)) (pre-iter (cadr tree)) (pre-iter (caddr tree))) 
))) 

次のことがなぜ起こるか私は見つけることができません。

(iter-tree (quote (F (B A (D C E)) (G() (I H())))) pre-iter): expected '(F B A D C E G I H), got '(F B A D C E G() I H()) 

はあなたの助けのためにありがとうございました。

答えて

0

サブツリーがnullの場合は、余分なケースを処理するだけで済みます。これを試してみてください:

(define pre-iter 
    (lambda (tree) 
    (cond ((null? tree) '()) 
      ((not (pair? tree)) (list tree)) 
      (else 
      (append (list (car tree)) 
        (pre-iter (cadr tree)) 
        (pre-iter (caddr tree))))))) 

要求されるようにそれが動作します。

(pre-iter '(F (B A (D C E)) (G() (I H())))) 
=> '(F B A D C E G I H) 
+0

おかげでオスカー、私は演算子を使用して終了リストから括弧を除去する「フラット化」 – Tamarcuse

関連する問題