题目描述
求解平衡二叉树即判断是否有高度差大于1的左右子树。因此必须要知道子树的情况才能判断当前节点的情况,所以需要采用后序遍历。递归的三个步骤如下
- 函数返回值,参数:当前节点的高度即可
- 终止条件: 访问的节点为空即返回
- 单层逻辑: 递归左子树,判断左子树的高度是否为-1,右子树同样
因为有一个子树不符合条件那么,这个树也就不是平衡二叉树
代码实现
再说一下当前对递归的理解,递归就是先一路走到头,然后再执行下条语句,不断地往会走
class Solution {
public:
int getheight(TreeNode *root)
{
if(root==nullptr)
{
return 0;
}
int leftheight = getheight(root->left);
if(leftheight==-1)
{
return -1;
}
int rightheight = getheight(root->right);
if(rightheight==-1)
{
return -1;
}
// abs是绝对值
return abs(leftheight - rightheight) > 1 ? -1 : 1+max(leftheight, rightheight);
}
bool isBalanced(TreeNode* root) {
return getheight(root) == -1 ? false : true;
}
};