二叉树平衡的定义以下:任意一个结点,其两颗子树的高度差不超过1javascript
递归访问每一个整棵树,计算每一个结点子树的高度java
[java] view plain copynode
但这样作的效率不高,getHeight()会被反复调用计算同一个结点的高度,时间复杂度为O(N logN)app
getHeight()其实不只能够检查高度,还能检查树是否平衡,只要将判断左右子树高度差是否大于一放进getHeight()就能够了,下面用checkHeight()来表示这一段代码。spa
这样作的好处是时间复杂度下降了,为O(N),空间复杂度为O(H),H为树的高度.net
[java] view plain copyblog
或者:递归
咱们用后序遍历的方式遍历二叉树的每个结点,在遍历到一个结点以前咱们已经遍历了它的左右子树。只要在遍历每一个结点的时候记录它的深度(某一结点的深度等于它到叶节点的路径的长度),咱们就能够一边遍历一边判断每一个结点是否是平衡的
ip
Java代码get