一:题目
二:上码
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
/**
思路:
1.这里是求高度的话 那么的话我们要用的是后序遍历 从下往上
2.递归
1>:确定递归函数的参数和返回类型
参数是我们的root
返回类型是 int
我们每次要返回的是 我们求取子树的高度
同时注意如果两个高度差大于1的话 那么我们就返回-1,
2>:确定终止条件
遍历到根节点
3>:确定递归体(只考虑一层)
求出子结点的高度,如果等于-1;那就返回-1;
然后求出差值(如果大于1那就返回-1);
返回根节点的最大高度(比较左右子树最大高度)
*/
public boolean isBalanced(TreeNode root) {
int ans = getAns(root);
return ans == -1?false : true;
}
//只考虑一层
public int getAns (TreeNode root) {
if (root == null) return 0;//遍历到空节点 返回值肯定为0
int left_len = getAns(root.left);//求子结点的高度
if (left_len == -1) return -1;
int right_len = getAns(root.right);
if (right_len == -1) return -1;
if(Math.abs(left_len - right_len) > 1) {
return -1;
}
return Math.max(left_len+1,right_len+1);//返回根节点的高度
}
}