题目描述:
题目分析:
这里平衡的评判标准就是某一棵树的左右子树深度之差是否满足不超过一,所以接下来的任务就简单了,
任务一:计算某子树的深度;
任务二:遍历当前树的所有节点;
对于任务一,只需要明白递归终点是节点为空以及每遍历一层深度加一即可;对于任务二可以使用任意一种(本文使用的是先序遍历)遍历方法,递归遍历即可。
代码:
public class IsBalanced {
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.right = new TreeNode(2);
root.right.right = new TreeNode(3);
root.right.right.right = new TreeNode(4);
root.left = new TreeNode(2);
root.left.left = new TreeNode(3);
root.left.left.left = new TreeNode(4);
System.out.println(isBalanced(root));
}
static boolean flag = true;
public static boolean isBalanced(TreeNode root) {
if (root==null)
return true;
if (Math.abs(deep(root.left)-deep(root.right))>1)
flag = false;
isBalanced(root.left); //测试每个节点是否都满足平衡要求
isBalanced(root.right);
return flag;
}
public static int deep(TreeNode node){
if (node == null)
return 0;
return Math.max(deep(node.right),deep(node.left))+1;
}
}