LCR 176. 判断是否为平衡二叉树
利用递归得出结果,平衡二叉树成立的条件:左子树和右子树之差的绝对值小于等于 1,也就是当左子树高度 - 右子树高度的差值等于 0或者等于1的时候该平衡二叉树成立。
那么我们可以利用负数作为不成立的返回结果,当某个子二叉树不成立的时候返回 -1 给父节点,父节点再返回给其父节点(该过程递归会自动完成)。
因此我们只需要计算左右子树的高度以及做一些边界条件的判断即可判断是否为平衡二叉树
public boolean isBalanced(TreeNode root) {return getHeight(root) != -1;
}
// 获取树的高度
private int getHeight(TreeNode node) {if(node == null) return 0;int left = getHeight(node.left);if(left == -1) return -1;int right = getHeight(node.right);if(right == -1 || Math.abs(left - right) > 1) return -1;return Math.max(left, right) + 1;
}
LCR 175. 计算二叉树的深度
也是使用递归计算树的高度
+1
是因为每往下层“递”的时候,层数是增加的,而我们在计算树的深度是以树的最深的深度作数的,因此还要比较最大值
public int calculateDepth(TreeNode root) {if(root == null) return 0;int left = calculateDepth(root.left);int right = calculateDepth(root.right);return Math.max(left, right) + 1;
}