从符号输入构造树

时间:2014-08-28 22:40:10

标签: recursion tree scheme

我正在尝试使用字符串输入构建一个方案语言的树。以下是我试过的 -

(define travsal (lambda (tree)
             (cond
               ((null? tree) '())
               (#t (append (travsal (car tree)) (cons (cadr tree)
(travsal (caddr tree))))))))

 (define tree1 '(((() 4 ()) 2 (() 5 ())) 1 ((() 6 ()) 3 (() 7 ()))))

  (display tree1)
  (newline)

  (travsal tree1)

正如您所看到的,它只是迭代所提供的输入而不是执行实际的二叉树应该做的事情。 我对如何使用节点和子符号来保存树的逻辑感到震惊,如#"(((()4())2(()5()))1((()6 ())3(()7()))))"然后将其打印出来就像上面的功能一样。

请大家帮忙,我在接受采访时被问到这个问题但仍无法解决。

1 个答案:

答案 0 :(得分:0)

你是什么意思"没有做什么实际的二叉树应该做"? 。遍历代码很好,它正在执行树的in-order traversal。修复了一些格式问题:

(define travsal
  (lambda (tree)
    (cond ((null? tree) '())
          (else (append (travsal (car tree))
                        (cons (cadr tree)
                              (travsal (caddr tree))))))))

现在,请记住,您提供的树是二进制的,但已排序:

(define tree1 '(((() 4 ()) 2 (() 5 ())) 1 ((() 6 ()) 3 (() 7 ()))))

如果我们绘制它,它将如下所示:

       1
     /   \
   2       3
  /  \   /   \
4     5 6     7

在使用travsal过程后,在有序遍历之后,将正确地产生此结果:

(travsal tree1)
=> '(4 2 5 1 6 3 7)