Recursion 从符号输入构造树
我试图用scheme语言从字符串输入构建一棵树。以下是我尝试过的-Recursion 从符号输入构造树,recursion,tree,scheme,Recursion,Tree,Scheme,我试图用scheme语言从字符串输入构建一棵树。以下是我尝试过的- (define travsal (lambda (tree) (cond ((null? tree) '()) (#t (append (travsal (car tree)) (cons (cadr tree) (travsal (caddr tree)))))))) (define tree1 '(((() 4 ()) 2 (() 5
(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(()))””,然后像上面函数正在打印的那样打印出来
请帮忙,我在一次采访中被问到这个问题,但仍然无法解决。你说“不做实际的二叉树应该做的事情”是什么意思。遍历代码很好,它正在对树进行一次遍历。修复一些格式问题:
(define travsal
(lambda (tree)
(cond ((null? tree) '())
(else (append (travsal (car tree))
(cons (cadr tree)
(travsal (caddr tree))))))))
现在,请记住,您提供的树是二进制的,但没有排序:
如果我们画它,它会像这样:
1
/ \
2 3
/ \ / \
4 5 6 7
在使用travsal
过程时,按顺序遍历后,将正确生成此结果:
(travsal tree1)
=> '(4 2 5 1 6 3 7)
现在他们在面试中问一些计划问题?好极了这份工作在哪里,我可以申请吗PIf的前序或后序二叉树必须打印出来,比我还要从头开始写逻辑。相反,如果我可以先存储树并对其应用输出逻辑。或者这对我来说很好?我不明白你的意思。您想如何“打印”它?这是一个横向图,还是一个实际的图形。如果您想从(比如)pre-order切换到post-order-yes,您必须编写一个不同的过程(但很简单,只需将参数的顺序更改为
append
,在列表中添加根)。您使用的树表示法很好,无需将其存储在其他位置,您可以直接在其上应用输出逻辑。谢谢您,Oscar,这样就可以了。只需一个简单的问题-“解析文本字符串并在内部数据结构中构建树”,此时我感到困惑,因为我没有在代码中构建任何类型的二叉树,它只是使用用户的输入。就这方面而言,这是否足够?@BeingCoder这取决于你如何接收实际输入。如果它确实是一个字符串,那么您必须对其进行求值,并将其转换为类似于tree1
的符号列表。如果输入已经是一个符号列表,那么这已经是我们需要的数据结构,列表可以用来表示树,如上图所示。
(travsal tree1)
=> '(4 2 5 1 6 3 7)