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如果它是完整的,那么最后一级可能是满的,也可能不是满的。如果它几乎完成了,那么最后一关就没有满。你的例子符合这两种定义。令人困惑的是,一棵几乎完全的二叉树是完全的。一棵几乎完全的树也是一棵完全的二叉树