部分有序树是否与二叉树相同?

时间:2015-08-06 23:35:36

标签: data-structures tree binary-tree

我对部分有序树的工作方式感到有些困惑。它们和二叉树有什么相同之处?另外,它最适合用于什么?

例如,如果我将5,6,4,9,3,1,7插入空树中,我会得到:

      5
     / \
    4   6
  /      \
 3       9
/       /
1      7

2 个答案:

答案 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,你似乎在这里展示一个。它们似乎是每棵父母都比其子女大的树。