实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。
给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。
解析:递归,检查左右子树高度的绝对值是否<1。检查高度的函数也是递归,求出两个子树的高度后需要加1才是带父节点的高度,当递归至叶节点时,返回的高度为0。
代码:
private int calcHeight(TreeNode node) {
if (node == null) {
return 0;
}
return Math.max(calcHeight(node.left), calcHeight(node.right)) + 1;
}
public boolean isBalance(TreeNode root) {
if (root == null) {
return true;
}
if (Math.abs(calcHeight(root.left) - calcHeight(root.right)) > 1) {
return false;
}
return isBalance(root.left) && isBalance(root.right);
}