使用递归完成该题的解析
1. 创建递归函数
public static Info process(Node node) {
//递归的出口
if (node == null) {
return new Info(true, 0);
}
// 递归获取左子树的节点
Info leftInfo = process(node.left);
// 递归获取右子树的节点
Info rightInfo = process(node.right);
// 根据左右子节点获取当前节点的深度,有可能左右两边深度不一样取最大值,
// 最后加1
int height = Math.max(leftInfo.height, rightInfo.height) + 1;
//是否是平衡树的标记
boolean isBalanced = true;
if (!leftInfo.isBalanced) {
isBalanced = false;
}
if (!rightInfo.isBalanced) {
isBalanced = false;
}
//判断条件,如果左子树的深度减去右子树深度的值大于1,说明其不是平衡树
if (Math.abs(leftInfo.height - rightInfo.height) > 1) {
isBalanced = false;
}
return new Info(isBalanced, height);
}
2. Info对象
//平衡树的对象
public static class Info {
public boolean isBalanced;
public int height;
public Info(boolean i, int h) {
isBalanced = i;
height = h;
}
}
3. 函数入口
public static boolean isBalanced(Node node) {
return process(node).isBalanced;
}