题目:
- 给定一个二叉树,判断它是否是 平衡二叉树。
示例:
- 输入: r o o t = [ 3 , 9 , 20 , n u l l , n u l l , 15 , 7 ] root = [3,9,20,null,null,15,7] root=[3,9,20,null,null,15,7]
- 输出: t r u e true true
解题思路一:(递归)
- 确定递归函数的参数和返回值:
int dfs(TreeNode* cur)
- 确定终止条件:
if(cur == NULL) return 0;
- 确定单层递归逻辑: 先序遍历顺序为: 左 − > 中 − > 右 左->中->右 左−>中−>右
int lHeight = dfs(cur->left);
if(lHeight == -1) return -1;
int rHeight = dfs(cur->right);
if(rHeight == -1) return -1;
return abs(lHeight - rHeight) > 1 ? -1 : 1 + max(lHeight, rHeight);
C++版整体代码
class Solution {
public:
int dfs(TreeNode* cur){
if(cur == NULL) return 0;
int lHeight = dfs(cur->left);
if(lHeight == -1) return -1;
int rHeight = dfs(cur->right);
if(rHeight == -1) return -1;
return abs(lHeight - rHeight) > 1 ? -1 : 1 + max(lHeight, rHeight);
}
bool isBalanced(TreeNode* root) {
return dfs(root) == -1 ? false : true;
}
};
Java版实现
class Solution {
public int dfs(TreeNode cur){
if(cur == null) return 0;
int lHeight = dfs(cur.left);
if(lHeight == -1) return -1;
int rHeight = dfs(cur.right);
if(rHeight == -1) return -1;
return Math.abs(lHeight - rHeight) > 1 ? -1 : 1 + Math.max(lHeight, rHeight);
}
public boolean isBalanced(TreeNode root) {
return dfs(root) == -1 ? false : true;
}
}