螺纹二进制搜索树的优点

时间:2014-01-05 15:57:30

标签: algorithm data-structures binary-tree binary-search-tree asymptotic-complexity

关于螺纹二进制搜索树的解释(如果你知道的话,请跳过它):

我们知道在具有n个节点的二叉搜索树中,有n + 1个左右指针包含null。为了使用包含null的内存,我们按如下方式更改二叉树 -

树中的每个节点z:

如果left [z] = NULL,我们在left [z]中输入tree-predecessor(z)的值(即指向包含前任键的节点的指针),

如果right [z] = NULL,我们在右[z]中输入tree-successor(z)的值(同样,这是一个指向包含后继密钥的节点的指针)。

这样的树称为线程二进制搜索树,新链接称为线程

我的问题是: 什么是螺纹二进制搜索树的主要优点(与#34;常规"二进制搜索树相比)。 在网上快速搜索告诉我,迭代地实现有序遍历是有帮助的,而不是递归地。

这是唯一的区别吗?还有其他方法可以使用线程吗?

这是如此有意义的优势吗?如果是这样,为什么? 递归遍历也花费O(n)时间,所以..

非常感谢。

2 个答案:

答案 0 :(得分:5)

非递归有序扫描是一个巨大的优势。想象一下有人要求你找到值“5”和它后面的四个值。使用递归很困难。但是如果你有一个线程树,那么很容易:按递归顺序搜索找到值“5”,然后按照线程链接获取接下来的四个值。

同样,如果您希望在特定值之前的四个值,该怎么办?使用递归遍历很难,但如果找到项目然后向后走螺纹链接则很简单。

答案 1 :(得分:0)

螺纹二元搜索树优于常规搜索树的主要优点在于遍历性质,与第一个相比,第一个更有效。

递归遍历意味着您不需要使用堆栈或队列来实现它。每个节点都有指针,它将以更有效的方式提供顺序的后继和前驱,同时在正常的BST需要堆栈中实现遍历,这是内存穷举(因为这里编程语言必须考虑堆栈的实现)。