顺序遍历无法正常工作

时间:2013-11-03 05:28:31

标签: scheme

我正在尝试编写一个inorder遍历而不使用append,这是我的代码

 (define inorder
    (lambda (tree)
      (define inorder-iter
        (lambda (tree list)
          (if (empty-tree? tree)
               list
               (cons (inorder-iter (left-subtree tree) 
                     (root tree) 
                     (inorder-iter (right-subtree tree) list)))))

    (inorder-iter tree '() )))

  (define empty-tree? null?)

  (define root car)

  (define left-subtree cadr)

  (define right-subtree caddr)


 tree-1
(9
 (6 (5 () ()) ())
 (18 (11 () (13 () (17 () ()))) (65 (52 (41 (39 () ()) ()) ()) (99 () ()))))

当我打电话时(inorder tree-1) 我得到(((5。6)。9)(11 13 17.18)(((39.41).52).65)99)看起来非常可怕。我想要的是'(5 6 9 11 13 17 18 39 41 52 65 99)。我究竟做错了什么?谢谢!

1 个答案:

答案 0 :(得分:2)

您的括号有几个问题。另请注意,您没有使用list参数 - 更重要的是,它的命名很差,因为它与内置过程冲突。

这个问题要求我们不使用内置的append函数,但简单的cons将不起作用。这是一个可能的解决方案:

(define inorder
  (lambda (tree)
    (define inorder-iter
      (lambda (tree lst)
        (if (empty-tree? tree)
            lst
            (inorder-iter (left-subtree tree)
                          (cons (root tree)
                                (inorder-iter (right-subtree tree)
                                              lst))))))
    (inorder-iter tree '())))

按预期工作:

(inorder tree-1)
=> '(5 6 9 11 13 17 18 39 41 52 65 99)