0
点赞
收藏
分享

微信扫一扫

判断平衡二叉树

迎月兮 2022-01-26 阅读 35

自顶向下

一棵二叉树为「平衡二叉树」的条件为:该树为空树,或者其左右子树的高度差最大为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));
        }
    
};

举报

相关推荐

0 条评论