我的意思是二元搜索树是一个树,其中左边的孩子比父母更小,右边的孩子比父母更大/更等。
线程二叉树有线程。这有什么不同?
答案 0 :(得分:5)
在线程二叉树中,具有空引用的叶子将替换为对有序后继(对于右子)或前驱(对于左子节点)节点的引用。如果仅使用后继引用或前驱引用,则树是单线程,如果两者都是,那么它是双线程。 这使得节点的有序遍历在计算上更便宜。
这张图片(借鉴Wikipedia)很好地展示了数据结构:
有关详细信息,请参阅Wikipedia article。
答案 1 :(得分:2)
比较这两个概念有点像比较苹果和水牛。 :)二叉搜索树是二叉搜索树的特例,其中元素满足您提到的顺序 - 左子树中的所有内容必须小于根节点,右子树中的所有内容都必须更大。线程树没有任何此类限制,事实上,线程树不必在节点中具有可与排序关系进行比较的数据。实际上,二叉搜索树是一个概念,它与树的实现方式没有任何关系,而一个线程树只是 关于树的实现方式 - 即。如何在树节点中设置指针。如果您决定以这种方式实现它,则二叉搜索树可以是线程树。
答案 2 :(得分:1)
这里thread
并不意味着另一个并行执行堆栈。它表示指向树的每个节点的下一个和前一个元素的指针。
请参阅Wikipedia上的说明。
答案 3 :(得分:1)
Wiki说"二进制树通过使所有正确的子指针(通常为空指向节点的顺序继承者(如果存在))和所有左子指针来进行线程化。通常为null指向节点的前序。"
您通常会这样做,因此您可以快速找到节点的顺序后继节点(给定节点)而不是遍历,直到每次遍历主节点和维护后继节点时。
虽然您适合使用二叉搜索树,但左侧的节点将小于父节点,而右侧的节点将大于父节点。
答案 4 :(得分:1)
Threaded Binary Tree Article in Wikipedia
"二进制树通过使所有正确的子指针(通常为null)指向节点的inorder后继(如果存在),并且通常为null的所有左子指针指向inorder先前的节点。"