判断平衡二叉树

自顶向下

一棵二叉树为「平衡二叉树」的条件为:该树为空树,或者其左右子树的高度差最大为1。因此,判断一棵二叉树是否平衡需要求其子树高度,并比较左右子树高度差。

因此此题的解题步骤如下:

  1. 设计「求二叉树高度」的函数getHeight(root),作用是求以root为根结点的二叉树高度;
  2. 遍历原二叉树,对其每个结点调用getHeight(root)函数,若存在某左右子树的高度差大于等于2,则是不平衡的;否则是平衡二叉树。

求取二叉树高度的思路如图所示。

class Solution {
public:
    bool IsBalanced_Solution(TreeNode* Root) {
        //空子树,是平衡二叉树
        if(!Root) return true;
        
        int leftHeight=getHeight(Root->left);//分别求左子树高度
        int rightHeight=getHeight(Root->right);//和右子树高度
        //左右子树高度之差大于1,faslse
         if(abs(leftHeight-rightHeight)>1) return false;
        //递归判断左右子树
        return IsBalanced_Solution(Root->left)&&IsBalanced_Solution(Root->right);
    }
    //求子树高度
        int getHeight(TreeNode* Root)
        {
            if(!Root) return 0;//空子树
            if(!Root->left&&!Root->right) return 1;//叶子结点
            return 1+max(getHeight(Root->left),getHeight(Root->right));
        }
    
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值