我正在尝试使用字符串输入构建一个方案语言的树。以下是我试过的 -
(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()))))"然后将其打印出来就像上面的功能一样。
请大家帮忙,我在接受采访时被问到这个问题但仍无法解决。
答案 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)