二进制搜索树列表方案

时间:2016-11-05 21:47:01

标签: scheme binary-tree racket binary-search-tree

我无法理解如何接受BST并将其转换为列表而不使用追加或任何高级技术。例如,您将获得一个BST,其中每个节点都有一个数字和一个名称(按字符串从最小到最大排序),并且您希望按顺序输出该BST中项目的值为3或者其他内容的列表这些行。

我知道这可以递归完成,但我认为我理解这个问题的最大问题与左右节点的分裂有关,因为你在这两个节点上使用递归但是你不得不将它们放在一起在最后的名单中。

理解这一点的任何帮助表示赞赏,请提前感谢。

2 个答案:

答案 0 :(得分:1)

因此,假设您有一个值为(1 2 3 4)的二叉树。你知道你不能cons 1你已经拥有(2 3 4)等等,所以实际上你需要反过来积累它们。

在二进制搜索树中,顺序遍历是左侧,使用cons制作列表的右侧så右侧,此节点,左侧。

(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))))))

它可能看起来不像右侧第一,但请记住,程序需要在应用之前评估它的参数。

您没有提到如何实现树的数据结构,所以我只是做了一些程序。这对最终结果来说无关紧要。

答案 1 :(得分:0)

这个问题的简短回答是:你是对的,你需要append。好消息是,(如果您正在执行此任务),您可以轻松实现自己的append。如果您不是在作业中执行此操作...只需直接使用append