我怎样才能有效地到达二叉搜索树的叶子?

时间:2009-06-29 23:51:50

标签: binary-tree binary-search-tree

我想总结BST叶子中的所有值。显然,我不能在没有遍历整棵树的情况下到达树叶。这是真的?我可以不花费O(N)时间到达树叶吗?

4 个答案:

答案 0 :(得分:3)

你知道叶子本身至少是O(n)的1/2(?)?

答案 1 :(得分:1)

没有遍历整棵树的情况下无法获取树的叶子(特别是如果你想要每一片叶子),这将不幸地在O(n)时间内运行。如果您想要访问所有这些树叶,您确定树是存储数据的最佳方式吗?还有其他数据结构可以更有效地访问您的数据。

答案 2 :(得分:1)

要访问BST的所有叶节点,您必须遍历BST的所有节点,其顺序为O(n)。

一种替代方法是使用B +树,您可以在O(log n)时间内遍历叶节点,之后可以按顺序访问所有叶节点以计算总和。因此,在您的情况下,它将是O(log n + k),其中k是叶节点的数量,n是B +树中节点的总数。

欢呼声

答案 3 :(得分:0)

您必须遍历树搜索没有子节点的节点,或者修改您用来表示树的结构以包含叶节点列表。这还需要修改插入和删除方法以维护列表(例如,如果从节点中删除最后一个子节点,它将成为叶节点)。除非这棵树非常大,否则它可能只需要继续前进并穿过树。