方法1:
1、这道题用后序遍历。
2、分别计算某结点的左子树和右子树的度,判断是否满足平衡二叉树平衡的定义。
3、写一个方法计算结点度(因为要传2个参数,分别计算左子树和右子树)。
之前一直疑惑为什么有的遍历直接调用,没有返回值。今天终于发现了,是因为递归调用的方法没有返回值。(手动微笑)
invertTree(root.left);
invertTree(root.right);
这道题,因为递归调用的方法是布尔型,所以是有 true和false的返回值的,要判断一下。
Java实现:
public class Solution {
public boolean IsBalanced_Solution(TreeNode root) {
if (root == null) return true;
if (IsBalanced_Solution(root.left)==false) return false;
if (IsBalanced_Solution(root.right)==false) return false;
int hl=count(root.left);
int hr=count(root.right);
if (Math.abs(hl-hr)>1) return false;
return true;
}
//计算结点的度
public int count(TreeNode root){
if (root==null) return 0;
int hl=count(root.left);
int hr=count(root.right);
return Math.max(hl,hr)+1;
}
}
python实现:
class Solution:
def IsBalanced_Solution(self, pRoot):
# write code here
# base case
if pRoot==None: return True
# 后序遍历喵
if self.IsBalanced_Solution(pRoot.left) == False: return False
if self.IsBalanced_Solution(pRoot.right) == False: return False
#计算度
def count(root):
if root==None: return 0
hl=count(root.left)
hr=count(root.right)
return max(hl,hr)+1
hl= count(pRoot.left)
hr= count(pRoot.right)
if abs(hl-hr)>1: return False
return True