1. 有了查找二叉树,为什么还需要平衡二叉树
上一节我们讲述了查找二叉树,对于二叉查找树来说,其查找效率十分依赖于树中节点的拓扑结构,也就是节点间的布局关系。举一个例子,下图描绘了一个节点插入顺序为 1、2、3、4、5 的查找二叉树。这些节点是按照递升顺序被插入的,如果这样,那么这颗查找二叉树的拓扑结构其实就是将节点排布在一条线上,而不是以扇形结构散开,再查找某个值的时候,运行时间就会退减到线性时间 O(n)。因为每一步比较操作后还是需要逐个比较其余的节点。也就是说,在这种情况下,在查找二叉树中查找节点与在数组中查找就基本类似了。
只有当查找二叉树中的节点以扇形结构散开时,当在查找二叉树中查找一个节点时,每一步比较操作后都会将节点的数量减少一半。所以,查找操作的运行时间为 O(log n)。同样的,对该查找二叉树的插入、删除和查找操作都可以达到最优的运行时间 O(log n)。
在讲述平衡二叉树之前,我想要先去确认几个问题的答案。
首先,第一个问题是,对于查找二叉树中的任意一个节点,其高度如何定义。
答案是&