我有一些关于二叉树的问题:
维基百科指出,当“一个完整的二叉树是一个二叉树,在这个二叉树中,除了最后一个层次外,所有的节点都被完全填充,并且所有的节点都尽可能的左移”,那么最后一段“尽可能的左移”是什么意思?
一个格式良好的二叉树被称为“高度平衡”,如果(1)它是空的,或者(2)它的左、右子树是高度平衡的,并且左树的高度在右树高度的1以内,从How to determine if binary tree is balanced?中获取,这是正确的还是1值上有“抖动”?我在我链接的答案中看到,在左右树的高度之间也可能存在4的差异系数
完整和高度平衡的定义只适用于二叉树还是其他树?
最佳答案
根据维基百科的定义,我必须
this page。定义是从那里取出来的,但经过了修改:
定义:一种二叉树,除最深的层次外,所有层次都被完全填满在深度n处
树,所有的节点必须尽可能的左。
不过,下面还有一个注释,
一个完整的二叉树在每个深度k
通道。
通常高度平衡树的定义是
描述。换言之:
当且仅当每个节点的两个子树的高度最多相差1时,树才是平衡的。
这个定义取自here同样,有时定义更灵活,以服务特定的目的。例如,AVL tree的定义表明
在AVL树中,任何节点的两个子树的高度
最多相差一个
不过,我记得有一次我不得不重写一个算法,以便
如果任何
节点最多相差2。注意,您给出的定义是递归的,这在二叉树中非常常见。
在子级数目可变的树中,您不能说它是完整的(任何父级都可以拥有您想要的子级数目)。不过,它也可以应用于n元树(有固定数量的n
子树)。
关于algorithm - 完整的二叉树定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11915437/