平衡二叉树

首先明确二叉树的高度和深度是两个不同的概念,深度是从上到下的,高度是从下到上的
深度:从根节点到该节点的最长简单路径边的条数
高度:从该节点到叶子节点的最长简单路径边的条数
在这里插入图片描述
因此求深度可用前序遍历(中左右),而求深度则使用后序遍历(左右中)

逻辑如下:传入参数是当前遍历的节点,返回值是当前子树的高度,若返回值为-1,则当前节点为根节点的子树不是平衡二叉树,此二叉树也不是平衡二叉树

判断此二叉树是否为平衡二叉树看左右子树高度差是否大于1,若大于则不是;若小于1,则当前节点的高度为1+左右子树中较大的高度(叶子结点的左右子树高度都为0 ,因此叶子结点高度是1,高度的返回值每次增加1)

class Solution {
public:
    int getHeigh(TreeNode* root){
        if(root == nullptr){
            return 0;
        }

        int lHeight = getHeigh(root->left);
        if(lHeight == -1) return -1;
        int rHeight = getHeigh(root->right);
        if(rHeight == -1) return -1;
        int res = abs(lHeight - rHeight) > 1 ? -1 : 1 + max(lHeight, rHeight);//高度每次增加1
        return res;
    }
    bool isBalanced(TreeNode* root) {
        int res = getHeigh(root);
        if(res != -1) return true;
        return false;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值