题目描述
给定一个二叉树,判断它是否是高度平衡的二叉树。
本题中,一棵高度平衡二叉树定义为:
一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。
解析
- 编写递归函数确定根节点高度,在给定函数中进行判断。
- 所编写的递归函数:递归计算每个节点的高度,若不合规(平衡二叉树),则返回-1;
递归
- 确定函数参数和返回值
int getHeight(TreeNode* root) - 确定终止条件
if(root == nullptr) return 0; - 确定单层递归逻辑:
- 采用后序遍历,递归左右子树高度,通过左右子树高度计算父节点高度;
- 递归左子树高度,若左子树高度不合规,则返回-1;
- 递归右子树高度,若右子树高度不合规,则返回-1;
- 计算该节点高度,若该节点左右子树高度差大于1,则不合规返回-1;若合规,则返回1+较高子树高度,即该节点高度。
int left = getHeight(root->left);
if(left==-1) return -1;
int right = getHeight(root->right);
if(right==-1) return -1;
\
int height;
if(abs(left-right)>1) height = -1;
else height = 1+max(left,right);
return height;
代码
class Solution {
public:
bool isBalanced(TreeNode* root) {
return getHeight(root) == -1 ? false : true ;
}
\
int getHeight(TreeNode* root){
if(root == nullptr) return 0;
\
int left = getHeight(root->left);
if(left==-1) return -1;
int right = getHeight(root->right);
if(right==-1) return -1;
\
int height;
if(abs(left-right)>1) height = -1;
else height = 1+max(left,right);
return height;
\
\
}
\
\
};