我正在阅读一本关于数据结构的书,它说左侧平衡二叉树是一棵树,其中叶子只占据最后一级的最左边位置。
这对我来说似乎有点模糊。这是否意味着叶子只在根的左侧,并且分布在整个水平,或者只留在整个树的左侧。究竟是什么构成左平衡?
我不确定我的猜测是否涵盖了任何答案,所以如果有人可以提供帮助,我们将不胜感激: - )。
答案 0 :(得分:6)
您可以将左平衡二叉树视为平衡二叉树,其中每个节点的左子树在右子树之前填充。在非正式术语中,这是一棵树,其中最底层的节点都在整个树的左侧。
以此树为例:
这棵树是平衡的,但不是左平衡的。但是,如果删除了节点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