关于螺纹二进制搜索树的解释(如果你知道的话,请跳过它):
我们知道在具有n个节点的二叉搜索树中,有n + 1个左右指针包含null。为了使用包含null的内存,我们按如下方式更改二叉树 -
树中的每个节点z:
如果left [z] = NULL,我们在left [z]中输入tree-predecessor(z)的值(即指向包含前任键的节点的指针),
如果right [z] = NULL,我们在右[z]中输入tree-successor(z)的值(同样,这是一个指向包含后继密钥的节点的指针)。
这样的树称为线程二进制搜索树,新链接称为线程。
我的问题是: 什么是螺纹二进制搜索树的主要优点(与#34;常规"二进制搜索树相比)。 在网上快速搜索告诉我,迭代地实现有序遍历是有帮助的,而不是递归地。
这是唯一的区别吗?还有其他方法可以使用线程吗?
这是如此有意义的优势吗?如果是这样,为什么? 递归遍历也花费O(n)时间,所以..
非常感谢。
答案 0 :(得分:5)
非递归有序扫描是一个巨大的优势。想象一下有人要求你找到值“5”和它后面的四个值。使用递归很困难。但是如果你有一个线程树,那么很容易:按递归顺序搜索找到值“5”,然后按照线程链接获取接下来的四个值。
同样,如果您希望在特定值之前的四个值,该怎么办?使用递归遍历很难,但如果找到项目然后向后走螺纹链接则很简单。
答案 1 :(得分:0)
螺纹二元搜索树优于常规搜索树的主要优点在于遍历性质,与第一个相比,第一个更有效。
递归遍历意味着您不需要使用堆栈或队列来实现它。每个节点都有指针,它将以更有效的方式提供顺序的后继和前驱,同时在正常的BST需要堆栈中实现遍历,这是内存穷举(因为这里编程语言必须考虑堆栈的实现)。