【问题标题】:Binary Search Tree To List Scheme二叉搜索树到列表方案
【发布时间】:2016-11-05 21:47:01
【问题描述】:
我无法理解如何在不使用附加或任何高级技术的情况下获取 BST 并将其转换为列表。例如,给您一个 BST,每个节点都有一个数字和一个名称(按字符串从小到大排序),并且您希望按顺序输出该 BST 中值为 3 或其他值的项目的列表这些行。
我知道这可以递归完成,但我认为理解这一点的最大问题与左右节点的拆分有关,因为您在这两个节点上都使用了递归,但是您必须以某种方式将它们放在一起在最终名单中。
感谢您对理解这一点的任何帮助,在此先感谢您。
【问题讨论】:
标签:
scheme
binary-tree
racket
binary-search-tree
【解决方案1】:
假设您有一棵二叉树,其值为(1 2 3 4)。你知道你不能 cons 1 除非你已经有 (2 3 4) 等,所以实际上你需要反向累积它们。
在二叉搜索树中,按顺序遍历左侧,此值,右侧 så 使用cons 创建列表将执行右侧,此节点,左侧。
(define (tree->list tree)
(let rec ((tree tree) (lst '()))
(if (tree-null? tree)
lst
(rec (tree-left tree)
(cons (tree-value tree)
(rec (tree-right tree) lst))))))
它可能看起来不像它首先做右侧,但请记住,一个过程需要先评估它的参数,然后才能应用它自己。
没有提到你是如何为你的树实现数据结构的,所以我只是做了一些程序。对于最终结果来说,这真的无关紧要。
【解决方案2】:
这个问题的简短回答是:你是对的,你需要append。好消息是,(如果您正在为作业执行此操作),您可以轻松实现自己的append。如果您不将此作为作业的一部分...直接使用append!