繁体   English   中英

二进制搜索树和线程二叉树之间有什么区别?

what is the difference between a Binary Search Tree and a Threaded Binary Tree?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我的意思是二叉搜索树是一个树,其中左边的孩子更小,右边的孩子比父母更大/更等。

线程二叉树有线程。 这有什么不同?

5 个回复

在线程二叉树中,具有空引用的叶子将替换为对有序后继(对于右子)或前一(对于左子节点)节点的引用。 如果只使用后继引用或前驱引用,那么树是单线程的 ,如果两者都是,则它是双线程的 这使得节点的有序遍历在计算上更便宜。

这张图片(借鉴维基百科 )很好地展示了数据结构:

在此输入图像描述

有关更多信息,请参阅Wikipedia文章

比较这两个概念有点像比较苹果和水牛。 :)二叉搜索树是二叉搜索树的特例,其中元素满足您提到的顺序 - 左子树中的所有内容必须小于根节点,右子树中的所有内容都必须更大。 线程树没有任何此类限制,事实上,线程树不必在节点中具有可与排序关系进行比较的数据。 事实上,二叉搜索树是一个概念,它与树的实现方式没有任何关系,而线程树只是关于树的实现方式 - 即如何在树节点中设置指针。 如果您决定以这种方式实现,则二叉搜索树可以是线程树。

这里thread并不意味着另一个并行执行堆栈。 它表示指向树的每个节点的下一个和前一个元素的指针。

请参阅维基百科上的解释。

维基说:“二进制树通过制作所有正确的子指针(通常为空指向节点的顺序继承者(如果存在))进行线程化,并且通常为空的所有左子指针指向该指针的前导。节点。”

您通常会这样做,因此您可以快速找到节点的顺序后继节点(给定节点)而不是遍历,直到每次遍历主节点和维护后继节点时。

虽然您适合使用二叉搜索树,但左侧的节点将小于父节点,而右侧的节点将大于父节点。

维基百科中的螺纹二叉树文章

“通过使所有正确的子指针(通常为空指向节点的顺序后继节点(如果存在))来对二叉树进行线程化,并且通常为空的所有左子指针指向节点的有序前导。 “

5 平衡二叉搜索树和 AVL 树之间究竟有什么区别?

我正在学习一些数据结构,但我无法弄清楚平衡 BST 和 AVL 树之间的区别。 根据我的理解,AVL树是高度差<= 1的平衡树。 那么平衡二叉搜索树呢? 这里有什么区别? 让我们举个例子: 我有一个排序数组{1,2,3,4,5} ,如果我把它变成平衡二叉搜索树,我得到的 PreOrder ...

6 线程二进制搜索树Java

我设法通过它的插入方法创建了一个线程化的二进制搜索树。 我现在需要遍历树并按顺序打印。 我有可以工作的代码,但是我使用了一个布尔标志来确定是否已打印该特定节点。 对于此分配,它不能是递归的。 我想知道是否存在一种将所有布尔标志完全清除为false的可能方法,因为如果我再次尝试打印,它将而 ...

暂无
暂无

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

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