繁体   English   中英

随机打印平衡BST的最佳方法?

[英]Best way to print a balanced BST in random order?

很抱歉,这似乎是一个随机的问题,但是我有一个超过100,000个名称/值对(如果可以的话,称它们为高分)的数据库,它们存储在AVL风格的平衡二进制搜索树中。 大多数时候,为了列出分数,我以有序遍历或逆序遍历的方式打印BST,但是今天我遇到了需要以随机(或伪随机)顺序打印树的需求。 是否有一些公认的或最佳的方法来执行此操作:请以不可预测的方式只访问每个节点一次?

PS-我想到了广度优先遍历,但是由于总是以相同的方式发生,所以它并不是真正随机的。 必须有一些聪明的方法或一些理想的面试答案,因为这似乎是一个普遍的问题。 除了将节点标记为已访问或创建外部跟踪数据结构外,我还没有想到任何真正聪明的方法。

我不知道为什么答案不只是采用BST,线性化然后打印出来。 我想您在这里担心的是线性化这样的数据结构可能会占用大量内存。 如果是这样的话,你可以随时挑选出树的片段 ,线性它们,然后跳跃。 随机遍历指针并希望排序能很好地工作是一个坏主意:您总是会费劲地寻找最后一个节点。 如果您有一棵完整的二叉树,则总是可以拿出数字并从根开始(实际上,您可以从树的完整性属性中免费获得线性化)。

编辑:

我没有得到应有的了解,因为我最近发现了这篇文章,尽管它是基于功能实现的,但对您可能有用。 我还没有读完所有内容,所以我不知道它如何遍历所有内容,但是如果您只想取出单个节点,则可以使用它。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM