算法笔记codeup9.4B,得一半分

suize19850705 2020-06-14 04:32:06
问题 B: 二叉搜索树
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB

题目描述
判断两序列是否为同一二叉搜索树序列

输入
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。

输出
如果序列相同则输出YES,否则输出NO

样例输入 Copy
6
45021
12045
54120
45021
45012
21054
50412
0
样例输出 Copy
NO
NO
YES
NO
NO
NO
代码:
#include <bits/stdc++.h>
using namespace std;

int A[10];
int A_size;

void shuhua(int temp)
{
A_size = 0;
do
{
A[A_size] = temp % 10;
A_size++;
temp /= 10;
} while (temp != 0);
reverse(A, A + A_size);
}

struct node
{
int data;
node* lchild;
node* rchild;
};

node* newNode(int x)
{
node* p = new node;
p->data = x;
p->lchild = p->rchild = NULL;
return p;
}

void insert(node* &root, int x)
{
if (root == NULL)
{
root = newNode(x);
return;
}
if (x <= root->data)
insert(root->lchild, x);
else if (x>root->data)
insert(root->rchild, x);
}

void creat(node* &root)
{
for (int i = 1; i < A_size; i++)
{
insert(root, A[i]);
}
}

void preorder(node* root, vector<int> &v)
{
if (root == NULL) return;
v.push_back(root->data);
preorder(root->lchild, v);
preorder(root->rchild, v);
}

void inorder(node* root, vector<int> &v)
{
if (root == NULL) return;

inorder(root->lchild, v);
v.push_back(root->data);
inorder(root->rchild, v);
}

void deleteTree(node* &root)
{
if (root == NULL) return;
deleteTree(root->lchild);
deleteTree(root->rchild);
delete root;
}

int main(void)
{
freopen("input.txt", "r", stdin);
int n, temp;
vector<int> pre1, pre2, in1, in2;
while (scanf("%d", &n) != EOF&&n != 0)
{
//root = NULL;
scanf("%d", &temp);
shuhua(temp);
node *root1 = newNode(A[0]);

creat(root1);
preorder(root1, pre1);
inorder(root1, in1);
for (int i = 0; i < n; i++)
{
pre2.clear();
in2.clear();
//root = NULL;
scanf("%d", &temp);
shuhua(temp);
node *root2 = newNode(A[0]);
creat(root2);
preorder(root2, pre2);
inorder(root2, in2);
//if (pre1 == pre2&&in1 == in2) printf("YES\n");
//else printf("NO\n");
puts(pre1 == pre2 && in1 == in2 ? "YES" : "NO");
//printf("before del\n");
//deleteTree(root2);
//printf("delete finish\n");
}
}

return 0;
}
不知道哪里出错了。
...全文
21 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧