例子:
从上图可以看出:
3的左子树高度为1,右子树高度为0,所以平衡!
1的左子树 高度为2,右子树高度为2,所以平衡!
而对于下图:
3的左子树高度为2,右子树高度为0,所以不是平衡树!
平衡树和是否为满二叉树没啥特殊联系
满二叉树必然是平衡的,但是平衡二叉树未必是满的!
一面总共一个多小时,红黑树问题就是高手也得手写一个小时,所以问道的概率不大。
但是可能会问道红黑树是啥,怎么用,和平衡二叉树有什么不同,相似点?
下面讲一个高度套路化的东西!
我们可以利用递归函数,判断x是否符合平衡性。
如果每一个数字 作为头结点 都是平衡树,则整棵树都是平衡的!
哪怕是其中一个子树破坏了这个标准,也是不平衡的!
假设我遍历到某个节点x,我怎么判断x的整棵树是不是平衡的?
需要综合如下信息
1.左树是否平衡(满足这项条件在 看下一个)
2.右树是否平衡(满足这项条件在 看下一个)
3.左树的高度是什么(满足这项条件在 看下一个)
4.右树的高度是什么
然后判断高度差是否为1
接下来设计递归结构:
递归函数返回值应该包含两个信息:
1.树是否平衡
2.这颗树的高度是什么
在pdf中
主函数如下::
首先建立了一棵树
然后调用 isbalancedbinarytree 函数
需要注意,只要执行if中的return语句,则函数后面部分都不会在执行了!
如果一棵树不是平衡二叉树,那么树的高度自然不必收集!
详见 初级(5)02.11.12部分