TOJ 5439数据结构实验:平衡二叉树

Posted kannyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TOJ 5439数据结构实验:平衡二叉树相关的知识,希望对你有一定的参考价值。

描述

判断一棵二叉树是否是平衡二叉树。

平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

二叉树节点定义如下:

struct TreeNode {

    int val;

    struct TreeNode *left;

    struct TreeNode *right;

};

题目部分代码已经完成,您只需要补充并提交以下函数:

int isBalanced(struct TreeNode *root);//如果是平衡二叉树,返回1,否则返回0

输入

输入为若干个整数(不超过512)表示一棵二叉树顺序表示时的结点元素值,其中0表示二叉树对应结点为空。输入以-1结束。 

输出

如果是平衡二叉树则输出Yes,否则输出No。

样例输入

1 2 3 0 0 4 5 -1

样例输出

Yes

#include<bits/stdc++.h>
using namespace std; 
struct TreeNode{
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
};
struct TreeNode*creat()
{
    int front=1,rear=0,x;
    TreeNode*qu[1005],*t,*root=NULL;
    while(scanf("%d",&x)!=EOF,x!=-1)
    {
        if(x==0)
            t=NULL;
        else
        {
            t=(struct TreeNode*)malloc(sizeof(struct TreeNode));
            t->val=x;
            t->left=NULL;
            t->right=NULL;
        }
        qu[++rear]=t;
        if(rear==1)
            root=t;
        else 
        {
            if(t&&qu[front])
            {
                if(rear%2==0)
                    qu[front]->left=t;
                else
                    qu[front++]->right=t;
            }
        }
    }
    return root;
}
int flag=1;
int dfs(struct TreeNode *root)
{
    if(!root)
        return 0;
    int x=dfs(root->left)+1;
    int y=dfs(root->right)+1;
    if(abs(x-y)>1)
        flag=0;
    return x>y?x:y;
}
int isBalanced(struct TreeNode *root)
{
    dfs(root);
    return flag;
}
int main()
{
    TreeNode*t=creat();
    if(isBalanced(t))
        cout<<"Yes\n";
    else 
        cout<<"No\n";
    return 0;
}

 

 

以上是关于TOJ 5439数据结构实验:平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章

SDUT 3374 数据结构实验之查找二:平衡二叉树

SDUTOJ 3374 数据结构实验之查找二:平衡二叉树

TOJ 1224数据结构练习题――后序遍历二叉树

北邮数据结构考研——平衡二叉树LR型失衡

[数据结构4.8]平衡二叉树

数据结构作业——魔法少女(平衡二叉树)