我对部分有序树的工作方式感到有些困惑。它们和二叉树有什么相同之处?另外,它最适合用于什么?
例如,如果我将5,6,4,9,3,1,7插入空树中,我会得到:
5
/ \
4 6
/ \
3 9
/ /
1 7
答案 0 :(得分:5)
二叉树是树的特定形状。具体来说,二叉树是一棵树,其中每个节点可以有0,1或2个子节点。二叉树对节点中可以存储的值或者这些值如何相互关联没有限制,因此以下所有都是有效的二叉树树:
1 4 9
/ / \ / \
3 2 6 3 6
/ \ / \ / \ \
3 2 1 8 0 2 4
部分排序的树是一个树,其中有一组特定的限制,其中值可以是树中的位置。具体来说,一个部分排序的树 - 顺便说一下,通常称为堆排序树 - 是每个节点的值大于其每个子节点的所有值的树。 (有时您会看到此属性要求每个节点的值都小于其子节点的所有值;这基本上是相同的)。但是,对于部分排序的树中的每个节点可以拥有多少个子项没有限制 - 部分排序的属性表示值可以去的位置,而不是树的形状。例如,以下是一些部分有序的树:
4 9 3
/|\ / \ \
3 2 1 4 5 2
/ \ /|\ \ \
0 2 3 3 3 3 1
这两棵树的前两个是部分有序的树,但不是二叉树,而最后一个是部分有序的树和二叉树。
您询问了您使用部分排序树的位置。许多着名和重要的数据结构 - 二进制堆,二项式堆,斐波纳契堆等 - 被实现为部分有序树的集合,其具有额外的结构特性。这些可用于实现快速优先级队列,这加快了许多着名的算法,如Dijkstra的查找最短路径的算法和Prim的查找最小生成树的算法。
请记住,部分排序的树不与二叉搜索树相同。在您的原始问题中,您展示了通过将一系列值插入空二进制搜索树而形成的树的示例。虽然这是对的,但它完全独立于部分有序的树。
希望这有帮助!
答案 1 :(得分:2)
我不太清楚你的意思。 binary tree是一个分支因子为2的树,即每个节点有0-2个子节点。所以你在这里的树也是二叉树。
也许你的意思是binary search tree (BST)(也是有序的二叉树),这就是你所呈现的内容。
<强> BSTS 强>
从这些插入规则排序,从根开始:
1:如果插入的节点小于一个节点,请检查左子节点
2:如果插入的节点大于某个节点,请检查右侧子
3:如果找不到孩子,请将号码作为节点插入
示例强>
因此,对于您而言,第一项 5 将成为根
那么 6 ,大于5,就会成为正确的孩子
4 ,少了,会成为它的左孩子
9 大于5,所以右转,看到6,仍然更大,成为6的右孩子。
3 小于5和4,所以它成为4的左孩子。
1 一直沿着这条路走下去,成为3的左边孩子。
最后 7 大于5,所以它向右移动,大于6,所以它再次向右移动,但小于9,因此变成了它的孩子。
正如您所看到的,插入的顺序对于BST的结构非常重要。
<强>优点强>
BST的优点是可以使用类似的方法搜索它们binary search允许O(log n)的插入,查找和删除时间,这非常好。因此,它们最适用于搜索时间很重要的情况,并且需要频繁插入/删除。此外,他们是memory efficient,并且不会占用任何比他们有物品更多的空间。
部分有序树
我不熟悉部分排序的树,但基于some googling,你似乎不在这里展示一个。它们似乎是每棵父母都比其子女大的树。