【发布时间】:2015-03-29 09:08:45
【问题描述】:
根据之前的 StackOverflow 答案,二叉树是平衡的,当且仅当其两个子树的高度相差不超过 1 (Complete binary tree definitions)。
这是否与说的相同:如果每个根到叶路径上的边数最多相差一个,则二叉树是平衡的?
我正在尝试想象二叉树与非二叉树的外观,并且正在努力围绕这个概念展开思考。
谢谢。
【问题讨论】:
标签: tree binary-tree
根据之前的 StackOverflow 答案,二叉树是平衡的,当且仅当其两个子树的高度相差不超过 1 (Complete binary tree definitions)。
这是否与说的相同:如果每个根到叶路径上的边数最多相差一个,则二叉树是平衡的?
我正在尝试想象二叉树与非二叉树的外观,并且正在努力围绕这个概念展开思考。
谢谢。
【问题讨论】:
标签: tree binary-tree
几乎,除非其中一个子树为空:
*
\
*
\
*
您引用的定义有点问题,因为空树实际上没有高度,但是如果您将空树定义为高度-1,它就可以工作。上面的树是不平衡的,因为(空)左子树的高度为 -1,而右子树的高度为 1。但是,您的定义将声明树是平衡的:只有一个从根到叶的路径,所以可以'不要与其他此类路径有任何不匹配。
但是,平衡性仅与二元性部分相关。二进制只是意味着没有节点有两个以上的孩子。这是一个平衡的非二叉树的示例:
*
/|\
* * *
但是,树的数量(子节点数量的限制)会影响其平衡性。下面的树如果你声明它是二叉树是平衡的(只有两个子树,高度为 1 和 0),如果你声明它是三叉树是不平衡的(根的中间有一个子树,它是空的) :
*
/ \
* *
/
*
【讨论】:
二叉树应该仅有最多每个节点有两个子节点。我发现了一个 site,它显示了不同的数据结构(你可以和它们一起玩,它们是动画的)。
如果您对自平衡树感兴趣,请查看 AVL 树,您就会明白为什么二叉树会不平衡。祝你好运!
【讨论】: