【问题标题】:Are partially ordered trees the same as binary trees?偏序树和二叉树一样吗?
【发布时间】:2015-10-30 07:01:40
【问题描述】:

我对部分有序树的工作方式有点困惑。它们与二叉树的方式相同吗?另外,它的最佳用途是什么?

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

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

【问题讨论】:

  • 二叉树对顺序没有任何建议。它们只是在每个节点有两个(或更少)分支的树。
  • 您在此处展示的示例是一个二叉搜索树。有关它们的更多信息,请参阅下面的答案。

标签: data-structures tree binary-tree


【解决方案1】:

二叉树是树的特定形状。具体来说,二叉树是一棵树,其中每个节点可以有 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 算法。

请记住,部分有序树与二叉搜索树相同。在您最初的问题中,您展示了一个树的示例,该示例将通过将一系列值插入到一个空的二叉搜索树中来形成。虽然这是对的,但它完全独立于部分有序树。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    我不太清楚你的意思。一个binary tree是一个分支因子为2的树,即每个节点有0-2个孩子。所以你这里的树也是二叉树。

    也许您的意思是 binary search tree (BST)(也,有序二叉树),这就是您所呈现的。

    BST
    按照这些插入规则排序,从根开始:
    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,您似乎没有在这里展示一棵树。它们似乎是每个父级严格大于其子级的树。

    【讨论】:

    • 我认为“partially-ordered tree”是“heap-ordered tree”的同义词。 This definition 似乎与此相符。
    • @templatetypedef 这也是我的假设所依据的定义。
    • 感谢您的信息:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-24
    • 1970-01-01
    • 2020-04-25
    相关资源
    最近更新 更多