题目地址

https://pta.patest.cn/pta/test/15/exam/4/question/712

5-4 是否同一棵二叉搜索树   (25分)

给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。

输入格式:

输入包含若干组测试数据。每组数据的第1行给出两个正整数NN (\le 10≤10)和LL,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出NN个以空格分隔的正整数,作为初始插入序列。最后LL行,每行给出NN个插入的元素,属于LL个需要检查的序列。

简单起见,我们保证每个插入序列都是1到NN的一个排列。当读到NN为0时,标志输入结束,这组数据不要处理。

输出格式:

对每一组需要检查的序列,如果其生成的二叉搜索树跟对应的初始序列生成的一样,输出“Yes”,否则输出“No”。

输入样例:

4 2
3 1 4 2
3 4 1 2
3 2 4 1
2 1
2 1
1 2
0

输出样例:

Yes
No
No

鸣谢青岛大学周强老师补充测试数据!

/*时间	结果	得分	题目	编译器	用时(ms)	内存(MB)	用户
2017-06-28 19:34 答案正确 25 5-4 gcc 2 1
测试点结果
测试点 结果 得分/满分 用时(ms) 内存(MB)
测试点1 答案正确 12/12 2 1
测试点2 答案正确 8/8 2 1
测试点3 答案正确 3/3 2 1
测试点4 答案正确 2/2 2 1
*/ //建两棵树树然后比较树的方法,建树过程中卡壳,小测试数据没发现问题,修改if逻辑后ac #include<stdio.h>
#include<stdlib.h>
#define __DEBUGPRINT //
typedef struct TreeNode *BSTTree;
typedef struct TreeNode{
int data;
BSTTree left;
BSTTree right;
int flag;
}; int Max(int a,int b)
{
return a>b ? a : b;
} BSTTree BST_Insert(int x,BSTTree T)
{
if(T==NULL)
{
T=malloc(sizeof(struct TreeNode));
T->data=x;
T->left=NULL;
T->right=NULL;
T->flag=0;
return T;
}
if(x < T->data)
{
T->left=BST_Insert(x,T->left);
}
if(x > T->data)
{
T->right=BST_Insert(x,T->right);
}
return T;
} void BST_CleanFlag(BSTTree T)
{
if (T!=NULL)
{
__DEBUGPRINT("+++Func Cleanflag T->data=%d\n",T->data);
T->flag=0;
}
if(T->left != NULL)
BST_CleanFlag(T->left);
if(T->right != NULL)
BST_CleanFlag(T->right);
return;
} void BST_Free(BSTTree T)
{
if(T!=NULL)
{
__DEBUGPRINT("+Func BST_Free T->data=%d\n",T->data);
BST_Free(T->left);
BST_Free(T->right);
free(T);
}
} void BST_Print(BSTTree T)
{
if(T!=NULL)
{
BST_Print(T->left);
printf(":%d ",T->data);
BST_Print(T->right);
}
}
int TreeCompare(BSTTree A,BSTTree B)
{
if(A==NULL && B== NULL)
{
__DEBUGPRINT("++compare node all null\nA=%d,B=%d",A,B);
return 0;
}
else if((A==NULL && B!=NULL)||(A!=NULL && B==NULL))
{
__DEBUGPRINT("++one is null,one not\n");
return 1;
}
else if(A->data !=B->data)
{
__DEBUGPRINT("++not same data\n");
return 1;
} else
{
__DEBUGPRINT("++begin to compare child\n");
return Max(TreeCompare(A->left,B->left),TreeCompare(A->right,B->right));
}
} int check(int x,BSTTree T)
{
if(T==NULL) {
__DEBUGPRINT("++check ,x=%d,find a NULL node return 1\n",x);
return 1;
} if(T->flag==0)
{
if(x==T->data)
{
T->flag=1;
__DEBUGPRINT("++check ,x=%d,set a flag to node return 0\n",x);
return 0;
}
else
{
__DEBUGPRINT("++check ,x=%d,T->data=%d,dismatch,return 1\n",x,T->data);
return 1;
}
}
else if(x < T->data)
{
return check(x,T->left) ;
}
else if(x > T->data)
{
return check(x,T->right);
}
else return 1;
} int func()
{ int i,j,N,L,temp,flag_all;
BSTTree A=NULL,B=NULL; scanf("%d",&N);
if(N==0)
return 0; scanf("%d",&L); for(i=0;i<N;i++)
{
scanf("%d",&temp);
A=BST_Insert(temp,A);
} //BST_Print(A);
//printf("\n");
for(j=0;j<L;j++)
{
flag_all=0;
for(i=0;i<N;i++)
{
scanf("%d",&temp);
B=BST_Insert(temp,B);
}
flag_all=TreeCompare(A,B);
//BST_Print(B);
//printf("\n");
BST_Free(B);
B=NULL;
if(flag_all>0)
printf("No\n");
else
printf("Yes\n"); } BST_Free(A);
return 1;
} int main()
{ while(func());
}

  

PTA 04-树4 是否同一棵二叉搜索树 (25分)的更多相关文章

  1. 7-4 是否同一棵二叉搜索树 (25分) JAVA

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...

  2. PAT 天梯赛 是否同一棵二叉搜索树   (25分)(二叉搜索树 指针)

    给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...

  3. PTA 是否二叉搜索树 (25分)

    PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...

  4. PTA L2-004 这是二叉搜索树吗?-判断是否是对一棵二叉搜索树或其镜像进行前序遍历的结果 团体程序设计天梯赛-练习集

    L2-004 这是二叉搜索树吗? (25 分)   一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结 ...

  5. PTA 是否同一棵二叉搜索树(25 分)

    是否同一棵二叉搜索树(25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始 ...

  6. PTA 7-1 是否完全二叉搜索树 (30分)

    PTA 7-1 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. ...

  7. [LeetCode] Trim a Binary Search Tree 修剪一棵二叉搜索树

    Given a binary search tree and the lowest and highest boundaries as L and R, trim the tree so that a ...

  8. 04-树4 是否同一棵二叉搜索树(25 point(s)) 【Tree】

    04-树4 是否同一棵二叉搜索树(25 point(s)) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和 ...

  9. 图解算法——恢复一棵二叉搜索树(BST)

    题目来源 基础:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树. 进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出一个只使用常数空间的 ...

随机推荐

  1. Package 和 import 语句

  2. session共享方法

    session数据保存在memcached,redis这种内存数据库内 memcache比较简单,使用的场景比较多.redis支持的数据类型多.而且数据具有期限,和session和期限可以配合使用 通 ...

  3. python_8(模块)

    第1章 模块 1.1 概述 1.2 模块的分类 1.2.1 内置模块 1.2.2 扩展模块 1.2.3 模块安装 1.2.4 自定义模块第2章 模块之内置模块 2.1 collections模块 2. ...

  4. TRUNCATE DELETE DROP 区别

    TRUNCATE TABLE 在功能上与不带 WHERE 子句的 DELETE 语句相同:二者均删除表中的全部行.但 TRUNCATE TABLE 比 DELETE 速度快,且使用的系统和事务日志资源 ...

  5. RabbitMQ八:交换机类型Exchange Types--Topic介绍

    前言 上一章节,我们说了两个类型,本章我们说一下其三:Topic Exchange Topic Exchange  Topic Exchange – 将路由键和某模式进行匹配.此时队列需要绑定要一个模 ...

  6. java只http改成https访问

    目录 生成keystore文件 修改tomcat中的server.xml文件 配置浏览器 生成keystore文件: 1.在tomcat的bin 目录下输入命令:keytool -genkeypair ...

  7. jQuery中面向对象思想实现盒子内容切换

    这里主要是模拟小米官网中的首页的内容模块实现的主要动态效果 布局:采用了bootstrap框架进行布局,及其其中的字体图标 html: <!-- 内容 --> <div class= ...

  8. Koa--基于Node.js平台的下一代web开发框架的安装

    koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函 ...

  9. Ubuntu系统下配置PHP支持SQLServer 2005

    最近在做一个项目,该项目的数据库是微软公司的的SQLserver ,数据库安装在另一台windows服务器上,而项目却部署在ubuntu server上.那么这样就会涉及到项目在linux上如何链接S ...

  10. 程序员面试系列之Java单例模式的攻击与防御

    我写的程序员面试系列 Java面试系列-webapp文件夹和WebContent文件夹的区别? 程序员面试系列:Spring MVC能响应HTTP请求的原因? Java程序员面试系列-什么是Java ...