PTA 04-树4 是否同一棵二叉搜索树 (25分)
题目地址
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分)的更多相关文章
- 7-4 是否同一棵二叉搜索树 (25分) JAVA
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到. 例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结 ...
- PAT 天梯赛 是否同一棵二叉搜索树 (25分)(二叉搜索树 指针)
给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果 ...
- PTA 是否二叉搜索树 (25分)
PTA 是否二叉搜索树 (25分) 本题要求实现函数,判断给定二叉树是否二叉搜索树. 函数接口定义: bool IsBST ( BinTree T ); 其中BinTree结构定义如下: typede ...
- PTA L2-004 这是二叉搜索树吗?-判断是否是对一棵二叉搜索树或其镜像进行前序遍历的结果 团体程序设计天梯赛-练习集
L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结 ...
- PTA 是否同一棵二叉搜索树(25 分)
是否同一棵二叉搜索树(25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始 ...
- PTA 7-1 是否完全二叉搜索树 (30分)
PTA 7-1 是否完全二叉搜索树 (30分) 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果. ...
- [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 ...
- 04-树4 是否同一棵二叉搜索树(25 point(s)) 【Tree】
04-树4 是否同一棵二叉搜索树(25 point(s)) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和 ...
- 图解算法——恢复一棵二叉搜索树(BST)
题目来源 基础:给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换.请在不改变其结构的情况下,恢复这棵树. 进阶:使用 O(n) 空间复杂度的解法很容易实现.你能想出一个只使用常数空间的 ...
随机推荐
- 508 Most Frequent Subtree Sum 出现频率最高的子树和
详见:https://leetcode.com/problems/most-frequent-subtree-sum/description/ C++: /** * Definition for a ...
- 136 Single Number 数组中除一个数外其他数都出现两次,找出只出现一次的数
给定一个整数数组,除了某个元素外其余元素均出现两次.请找出这个只出现一次的元素.备注:你的算法应该是一个线性时间复杂度. 你可以不用额外空间来实现它吗? 详见:https://leetcode.com ...
- 让搜狗输入法更符合编程/vim使用的配置
1. “菜单”—“设置属性”—“常用”—“初始状态”里的“中/英文”选项,选中“英文” 2. 设置属性里的“高级”里的“高级模式”,点“英文输入法设置”,“启动时启用英文输入法”选中 3. 按键-中英 ...
- AJPFX关于表结构的相关语句
//表结构的相关语句==================================== 建表语句: create table 表名( ...
- Java开发笔记(九十四)文件通道的性能优势
前面介绍了字节缓存的一堆概念,可能有的朋友还来不及消化,虽然文件通道的用法比起传统I/O有所简化,可是平白多了个操控繁琐的字节缓存,分明比较传统I/O更加复杂了.尽管字节缓存享有缓存方面的性能优势,但 ...
- T4308 数据结构判断
https://www.luogu.org/record/show?rid=2143639 题目描述 在世界的东边,有三瓶雪碧. ——laekov 黎大爷为了虐 zhx,给 zhx 出了这样一道题.黎 ...
- ES6学习笔记(6)----函数的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 函数的扩展 函数的默认值 : ES6可以为函数指定默认值 (1)指定默认值的两种方式 a.函数参 ...
- iOS 利用UIWebView与JavaScript交互的最简单办法
这里说的是针对iOS的!并且方法很简单!!并且验证可行的!!! 1, UIWebView调用 JavaScript 的函数: NSString* strValue = [webView stringB ...
- Hive工具类
Hive2.x的工具类,对常用方法进行了封装,其中设置了kerberos认证. package com.ideal.template.openbigdata.util; import java.sql ...
- 基于jmeter和shell的接口性能自动化
基于jmeter和shell的接口性能自动化 1. 总体需求 由于性能测试中涉及的查询接口多,版本迭代频繁,版本更新后自动跑一轮查询业务的性能,可以及时发现一些开发修复bug触发的非预期的bug,利用 ...