[刷题] PTA 04-树4 是否同一棵二叉搜索树
程序:
1 #include <stdio.h>
2 #include <stdlib.h>
3 typedef struct TreeNode *Tree;
4 struct TreeNode{
5 int v;
6 Tree Left,Right;
7 int flag;
8 };
9 Tree NewNode(int V){
10 Tree T=(Tree)malloc(sizeof(struct TreeNode));
11 T->v = V;
12 T->Left = T->Right=NULL;
13 T->flag=0;
14 return T;
15 }
16 Tree Insert(Tree T,int V){
17 if(!T) T=NewNode(V);
18 else{
19 if(V>T->v)
20 T->Right = Insert(T->Right,V);
21 else
22 T->Left = Insert(T->Left,V);
23 }
24 return T;
25 }
26 //读数据建树T
27 Tree MakeTree(int N){
28 Tree T;
29 int i,V;
30 scanf("%d",&V);
31 T = NewNode(V);
32 for(i=1;i<N;i++){
33 scanf("%d",&V);
34 T=Insert(T,V);
35 }
36 return T;
37 }
38 //查找结点
39 int check(Tree T,int V){
40 if(T->flag){
41 if(V<T->v) return check(T->Left,V);
42 else if(V>T->v) return check(T->Right,V);
43 else return 0;
44 }else{
45 if(V==T->v){
46 T->flag = 1;
47 return 1;
48 }else return 0;
49 }
50 }
51 int Judge(Tree T,int N){
52 int i,V,flag = 0; //flag:0代表目前还不一致,1代表已经不一致
53 scanf("%d",&V);
54 if(V!=T->v) flag = 1;
55 else T->flag = 1;
56 for(i=1;i<N;i++){
57 scanf("%d",&V);
58 if((!flag)&&(!check(T,V))) flag = 1;
59 }
60 if(flag) return 0;
61 else return 1;
62 }
63 //清除T中各节点flag标记
64 void ResetT(Tree T){
65 if(T->Left) ResetT(T->Left);
66 if(T->Right) ResetT(T->Right);
67 T->flag = 0;
68 }
69 //释放T的空间
70 void FreeTree(Tree T){
71 if(T->Left) FreeTree(T->Left);
72 if(T->Right) FreeTree(T->Right);
73 free(T);
74 }
75 //判别是否与T构成一样的树
76 int main(){
77 int N,L,i;
78 Tree T;
79 scanf("%d",&N);
80 while(N){
81 scanf("%d",&L);
82 T=MakeTree(N);
83 for(i=0;i<L;i++){
84 if(Judge(T,N)) printf("Yes\n");
85 else printf("No\n");
86 ResetT(T); //flag清零
87 }
88 FreeTree(T); //数据清零
89 scanf("%d",&N);
90 }
91 return 0;
92 }
分析:
- 用链表存储树
[刷题] PTA 04-树4 是否同一棵二叉搜索树的更多相关文章
- 刷题-力扣-剑指 Offer II 055. 二叉搜索树迭代器
剑指 Offer II 055. 二叉搜索树迭代器 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/kTOapQ 著作权归领扣网络所有 ...
- PTA 04-树4 是否同一棵二叉搜索树 (25分)
题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/712 5-4 是否同一棵二叉搜索树 (25分) 给定一个插入序列就可以唯一确定一棵二 ...
- PTA L2-004 这是二叉搜索树吗?-判断是否是对一棵二叉搜索树或其镜像进行前序遍历的结果 团体程序设计天梯赛-练习集
L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结 ...
- [PTA] 数据结构与算法题目集 6-12 二叉搜索树的操作集
唯一比较需要思考的删除操作: 被删除节点有三种情况: 1.叶节点,直接删除 2.只有一个子节点,将子节点替换为该节点,删除该节点. 3.有两个子节点,从右分支中找到最小节点,将其值赋给被删除节点的位置 ...
- [刷题] PTA 03-树1 树的同构
程序: 1 #include <stdio.h> 2 #define MaxTree 10 3 #define ElementType char 4 #define Tree int 5 ...
- PTA 是否同一棵二叉搜索树(25 分)
是否同一棵二叉搜索树(25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始 ...
- LeetCode刷题191130 --基础知识篇 二叉搜索树
休息了两天,状态恢复了一下,补充点基础知识. 二叉搜索树 搜索树数据结构支持许多动态集合操作,包括Search,minimum,maximum,predecessor(前驱),successor(后继 ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历 二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...
- 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历
二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值:若它的右子树不空,则右子树上所有结点的值均大于它的根 ...
随机推荐
- windows一些知识
宽字节 1.什么是ASCII码? 一张存储了字母大小写与一些符号的表,用一个字节表示,最高位不使用,最多只能存储128个符号或字母,但世界上有很多种语言,这远远不够 2.什么是扩展ASCII码? 把最 ...
- 使用sysbench测试mysql及postgresql(完整版)
使用sysbench测试mysql及postgresql(完整版) 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14592166.html 前言 使用sysbe ...
- 给我一个shell我能干翻你内网
0x00 前言 在去年小菜鸡学了点内网知识就闲着没事跑点jboss的站看看,在经历过很多次内网横向失败之后终于算是人生圆满了一把,阿三的站一般进去之后很难横向,不知道是不是我太菜的原因,反正阿三的站能 ...
- 201871030115-康旭 实验二 软件工程个人项目—《D{0-1} KP》项目报告
项目 内容 课程班级博客连接 课程班级 这个作业要求连接 作业链接 我的课程学习目标 (1)详细阅读<构建之法>第1章.第2章,掌握PSP流程:(2)设计实际程序掌握动态规划算法.回溯算法 ...
- Day07_39_集合中的remove()方法 与 迭代器中的remove()方法
集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...
- 翻译:《实用的Python编程》InstructorNotes
实用的 Python 编程--讲师说明 作者:戴维·比兹利(David Beazley) 概述 对于如何使用我的课程"实用的 Python 编程"进行教学的问题,本文档提供一些通用 ...
- 1149 Dangerous Goods Packaging
When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...
- 对DiscuzQ的一些使用见解
之前因为体验了DiscuzQ,在几番纠结后,把博客换成了DiscuzQ(以下简称DZQ). 在一个月的使用中,发现这个程序对于个人来说,十分不友好. 于是今天又换回了Wordpress. 在这里说一下 ...
- linux 安装rabbitMQ详细教程
经过第一次的安装失败, 第二次总算是成功了, 这里总结一下. 第一步:下载版本对应的rpm安装包 1. 下载Erlang安装包:RabbitMQ是Erlang语言编写,所以Erang环境必须要有,注: ...
- 【SpringBoot】Springboot1.5.9整合WebSocket
一.WebSocket介绍 1.WebSocket是什么? WebSocket是协议,是HTML5开始提供的基于TCP(传输层)的一种新的网络协议, 它实现了浏览器与服务器全双工(full-duple ...