#include "stdio.h"
#include "stdlib.h"
#include<iostream>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASLBLE -1
#define OVERFLOW -2
#define MAXSTRLEN 255 //用户可在255以内定义最大串长
typedef unsigned char SString[MAXSTRLEN + 1]; //0号单元存放串的长度
struct BTNode {
int data;
BTNode* lchild;
BTNode* rchild;
};
BTNode* x;
void search(BTNode *p,int i);
void Create(BTNode *p,int k,int a[][2]) {
int ch,ch2;
ch = a[0][0];
ch2 = a[0][1];
p->data = ch;//设置第一个结点
p->lchild = NULL;
p->rchild = NULL;
for (int i = 1; i < k+1; i++) {
BTNode *t2 = p;
search(t2, ch);
BTNode *t = x;
if (t->lchild == NULL) {
t->lchild = new BTNode;
t = t->lchild;
}
else {
t->rchild = new BTNode;
t=t->rchild;
}
t->data = ch2;//设置结点
t->lchild = NULL;
t->rchild = NULL;
if (i <= k - 1)
{
ch = a[i][0];
ch2 = a[i][1];
}
}
}
void search(BTNode *p,int i) {
if (p == NULL) {
return;
}
else {
if (p->data == i) {
x=p;
return;
}
else {
search(p->lchild, i);
search(p->rchild, i);
}
}
}
int FindDepth(BTNode *p) {
if (p == NULL)
return 0;
else {
int m = FindDepth(p->lchild)+1;
int n = FindDepth(p->rchild)+1;
return m > n ? m : n;
}
}
int FindWidth(BTNode *p,int level) {
if (p == NULL){
return 0;
}
else {
if (level == 1)
return 1;
else {
return FindWidth(p->lchild, level - 1) + FindWidth(p->rchild, level - 1);
}
}
}
int FindMaxWidth(BTNode *p) {
if (p != NULL) {
int i = FindDepth(p);
int max=0,wid=0;
for (int j = 1; j <= i; j++) {
wid=FindWidth(p, j);
if (wid > max)
max = wid;
}
return max;
}
if (p == NULL) {
return 0;
}
}
void sort(int a[][2],int k) {
int t[2];
for (int i = 0; i < k-1; i++) {
for (int j = i+1; j < k; j++) {
if (a[i][0] > a[j][0]) {
t[0] = a[i][0];
t[1] = a[i][1];
a[i][0] = a[j][0];
a[i][1] = a[j][1];
a[j][0] = t[0];
a[j][1] = t[1];
}
}
}
}
int main()
{
BTNode *p;
int a[20][2],k;
p = new BTNode;
scanf("%d", &k);
for (int i = 0; i < k-1; i++) {
scanf("%d %d", &a[i][0],&a[i][1]);
}
sort(a,k-1);
Create(p,k-1,a);
printf("%d", FindMaxWidth(p));
return 0;
}
SCAU-18924-数据结构-二叉树的宽度
最新推荐文章于 2023-06-08 16:41:19 发布