以随机顺序打印平衡BST的最佳方法是什么?

时间:2012-05-17 03:34:09

标签: c binary-search-tree tree-traversal random-access avl-tree

如果这看起来像是一个随机的问题,我很抱歉,但我有一个超过100,000个名称/值对的数据库(如果你愿意,可以称之为高分)存储在平衡的二叉搜索树中,AVL风格。大多数时候,为了列出分数,我使用有序遍历或逆序遍历打印BST,但今天我遇到了以随机(或伪随机)顺序打印树的需求。是否有一些接受或最佳的方法:完全访问每个节点一次,但是以不可预测的方式?

PS - 我考虑过广度优先遍历,但由于这种情况总是以同样的方式发生,所以它并不是随机的。必须要有一些聪明的方法,或者一些理想的面试答案,因为这似乎是一个普遍的问题;除了将节点标记为已访问或创建外部跟踪数据结构之外,我还没有想出任何非常聪明的东西。

1 个答案:

答案 0 :(得分:1)

我不知道为什么答案不仅仅是采用BST,将其线性化,然后将其打印出来。我想你在这里担心的是,线性化这样的数据结构可能需要大量的内存。如果是这种情况,您可以随时挑选树的,线性化它们,然后跳转。随机遍历指针并希望能够正常运行的排序是一个坏主意:你总是会被搞砸,寻找最后一个节点。如果你有一个完整的二叉树,你总是可以提出数字并从根开始(实质上,你可以从树的完整性属性中免费获得线性化)。

编辑:

我的信息比我应该的要少,因为我最近发现了这篇文章,虽然它基于功能实现,但它可能对你有用。我还没有读完所有内容,所以我不知道它是如何迭代所有内容的,但是如果你只是想要一个节点,那么你可以使用它。

http://okmij.org/ftp/Algorithms.html#random-tree-node