左平衡的二叉树

时间:2011-09-01 19:37:43

标签: binary-tree tree-balancing

我正在阅读一本关于数据结构的书,它说左侧平衡二叉树是一棵树,其中叶子只占据最后一级的最左边位置。

这对我来说似乎有点模糊。这是否意味着叶子只在根的左侧,并且分布在整个水平,或者只留在整个树的左侧。究竟是什么构成左平衡?

我不确定我的猜测是否涵盖了任何答案,所以如果有人可以提供帮助,我们将不胜感激: - )。

4 个答案:

答案 0 :(得分:6)

您可以将左平衡二叉树视为平衡二叉树,其中每个节点的左子树在右子树之前填充。在非正式术语中,这是一棵树,其中最底层的节点都在整个树的左侧。

以此树为例:

enter image description here

这棵树是平衡的,但不是左平衡的。但是,如果删除了节点67,则树将保持平衡。

答案 1 :(得分:3)

在我看来,左平衡二叉树的定义与完整的二叉树相同。

答案 2 :(得分:3)

我真的不知道答案,但根据书中的描述,听起来像这样......

首先,让我们这样想吧。树中的每个“行”都有一个数字,从零开始计数。具有最高编号的行被视为最后一级。

请记住,叶节点是没有任何子节点的节点。因此树满足最后一级中每个叶节点必须在左侧的条件,如下所示:

          50
       /     \
     /         \
    35         70
   /  \       /  \
 10    34    57  90
 /     /        /
9     7        78

如果我们要添加一个“98”作为90的右子,或者将一个“59”作为57的右子,那么这棵树将不再是左平衡的。


修改:阅读Brandon E Taylor's answer后,您绝对不应该选择此项。在查看并再次阅读说明后,他不仅更有意义,而且更符合描述。

答案 3 :(得分:1)

除了Brandon E Taylor's答案之外,左平衡二叉树是一种二叉树,当以数组表示时,表示树节点的元素之间不应存在任何间隙。

例如,对于大小为6的树,这是一些具有以下条件的数组表示形式

1- let _ denote an empty slot in the array
2- let i be the index of a slot in an array (i is 1-based)
2- for any parent at index i the left child is at index (2*i) and the right child is at index (2*i)+1

1 2 3 4 _ _ <-  left balanced 
6 3 2 4 1   <-  left balanced
4 2 1 _ 6   <- not left balanced

为进一步详细说明,让我们代表user265312的答案:

50 35 70 10 34 57 90 9 _ 7 _ _ _ 78 _ <- not left balanced

同时Brandon的答案(在删除节点67之后)没有违反左平衡规则:

50 17 72 12 23 54 76 9 14 19 _ _ _ _ _ <- left balanced