判断是否为平衡二叉树

#include<iostream>
using namespace std;

struct TreeNode
{
    int val;
    TreeNode * left;
    TreeNode * right;
    TreeNode(int x):val(x),left(NULL),right(NULL){}
};


//先序创建二叉树
void CreateBTree(TreeNode *& T)
{
    int data;
    cin>>data;
    if(data==-1)
    {
        T = NULL;
        return ;
    }
    else
    {
        T = new TreeNode(data);
        //构造左子树
        CreateBTree(T->left);
        //构造右子树
        CreateBTree(T->right);
    }
}



class Solution
{
    public:
        //计算结点深度
        int TreeDepth(TreeNode * T)
        {
            if (T == NULL)
            {
                return 0;
            }
            int nLeftDepth = TreeDepth(T->left);
            int nRightDepth = TreeDepth(T->right);

            return (nLeftDepth>nRightDepth)?(nLeftDepth+1):(nRightDepth+1);
        }
        //判断是否为平衡二叉树
        bool isBanlanced(TreeNode * root)
        {
            if(root== NULL)
            {   
                return true;
            }
            int nLeftDepth = TreeDepth(root->left);
            int nRightDepth = TreeDepth(root->right);
            int diff = nRightDepth-nLeftDepth;

            if (diff>1 || diff<-1)
            {
                return false;
            }
            return isBanlanced(root->left)&&isBanlanced(root->right);
        }
};

int main()
{
    TreeNode * root;
    Solution soulution;
    CreateBTree(root);//创建二叉树
    bool b = soulution.isBanlanced(root);//判断是否为平衡二叉树
    if(b)
    {
        cout<<"is Banlanced Binary Tree!!"<<endl;
    }
    else
    {
        cout<<"is not Banlanced Binary Tree!!"<<endl;
    }
    return 0;
}

非平衡二叉树
非平衡二叉树
这里写图片描述


这里写图片描述
平衡二叉树
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值