Data structures 完全二叉树与几乎完全二叉树的区别

Data structures 完全二叉树与几乎完全二叉树的区别,data-structures,tree,Data Structures,Tree,一个完整的树是一个每一层都被完全填充的树,一个几乎完整的树是一个如果最后一层没有被完全填充,那么所有节点都尽可能左移的树。我的困惑在于下面的二叉树示例: O / \ O O / \ / \ O O O O / \ O O 根据定义,它应该是一个不完整的二叉树,但它是一个完整的二叉树。如果有人能详细说明这个完整的二叉树是怎么回事,为什么不是一个不完整的二

一个完整的树是一个每一层都被完全填充的树,一个几乎完整的树是一个如果最后一层没有被完全填充,那么所有节点都尽可能左移的树。我的困惑在于下面的二叉树示例:

            O
          /   \
         O      O
       /  \    / \
      O    O  O   O
     / \
    O   O

根据定义,它应该是一个不完整的二叉树,但它是一个完整的二叉树。如果有人能详细说明这个完整的二叉树是怎么回事,为什么不是一个不完整的二叉树呢

你把事情弄糊涂了。你从哪里得到这些定义的

定义:

二叉树T是满的如果 每个节点要么是叶节点,要么是叶节点 他正好有两个孩子 节点

具有n个级别的二叉树T是完整的 可能最后一关已经满了,最后一关已经满了 它的节点位于左侧

您对“完整树”的解释似乎是“完整树”


来源:

您的示例是一个完整的二叉树:一个完整的二叉树可以有一个不完整的最后一级,只要它的所有叶子都被推到左边

完美二叉树是最后一级已满的完整二叉树

几乎完全的二叉树是一个完整但不完美的二叉树。所以你的例子也差不多完成了


术语令人困惑,但几乎完整的二叉树也是完整的。

ACBT是一种树,其中每个节点都有一个右子节点,也有一个左子节点。拥有左子节点并不一定要求节点拥有右子节点。

不确定这些术语的来源。。。我所学的二叉树的技术术语是严格的二叉树、完全树和几乎完全树

严格二叉树是二叉树,其中每个节点要么有两个子节点,要么是一片叶子(没有子节点)

完全二叉树是严格意义上的二叉树,其中每个叶子都处于相同的“最大”水平

几乎完全的二叉树不一定是严格的二叉树(尽管它们可以是),也不完全。如果树的最大级别为d,则包含从根到级别d-1的所有节点的子树是完整树。此外,如果一个节点在d级有一个右后代,那么它的左子树是一个完整的树,其叶子都在d级(树的所有“底部”节点都是“尽可能左”)


根据我所学到的,公认的答案是“几乎完全的二叉树也是完全的”,这是不正确的。如果你把树的最底层的每一片叶子都去掉,一棵几乎完整的二叉树就完成了。

事实上,这种混乱是由于阅读不同的书籍而产生的。完全二叉树的解释(即除最后一级外的每一级都完全填充,所有节点尽可能远离)在一些书中称为几乎完全二叉树,FBT的解释作为CBT的解释,而BT的解释作为FBT。他们没有关于严格二叉树的任何解释,或者如果可能的话,他们也没有关于FBT的解释。

我喜欢下面的定义

完整二叉树:

            O
          /   \
         O      O
       /  \    / \
      O    O  O   O
     / \
    O   O
在一个完整的二叉树中,树的所有层次都是填充的 除了最后一关。在最后一个级别中,节点可能是 可能没有填满。另外,让我们注意到,所有节点都应该 从左边开始填写

几乎完全二叉树:

            O
          /   \
         O      O
       /  \    / \
      O    O  O   O
     / \
    O   O
几乎完全二叉树是一种特殊的二叉树,其中 插入按从左到右的顺序逐级进行 每个级别和最后一个级别并不总是完全填充

所以几乎完全二叉树也是完全二叉树。与完全BT的不同之处在于,几乎完全BT的最后一级并不是总是完全填满的


来源:

考虑到我的定义,几乎完整的树实际上是完整的树?是的。“几乎完全树”是“完全树”的一个特例。那么什么是几乎完全二叉树?完全二叉树和几乎完全二叉树之间到底有什么区别?@Bramsh如果它几乎完全,那么最后一级不是完全二叉树,它与完全二叉树不一样吗?因为在完整树中,最后一级也不像我的示例中那样满。@Bramsh如果它是完整的,那么最后一级可能是满的,也可能不是满的。如果它几乎完成了,那么最后一关就没有满。你的例子符合这两种定义。令人困惑的是,一棵几乎完全的二叉树是完全的。一棵几乎完全的树也是一棵完全的二叉树