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数据结构实验:平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章