PTA——是否同一棵二叉搜索树

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 }

分析:

1、用链表存储树

原文地址:https://www.cnblogs.com/cxc1357/p/10810099.html

时间: 2024-09-29 20:41:11

PTA——是否同一棵二叉搜索树的相关文章

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

L2-004 这是二叉搜索树吗? (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点, 其左子树中所有结点的键值小于该结点的键值: 其右子树中所有结点的键值大于等于该结点的键值: 其左右子树都是二叉搜索树. 所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树. 给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果. 输入格式: 输入的第一行给出正整数 N(≤).随后一行给出 N 个整数键值,其间以空格分隔. 输

04-树4 是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始插入序列.最后L行,每行给出N个插入的元素,属于

输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表。

一.问题描述 输入一棵二叉搜索树,现在要将该二叉搜索树转换成一个排序的双向链表.而且在转换的过程中,不能创建任何新的结点,只能调整树中的结点指针的指向来实现. 二.实现思路 在二叉搜索树中,每个结点都有两个分别指向其左.右子树的指针,左子树结点的值总是小于父结点的值,右子树结点的值总是大于父结点的值.而在双向链表中,每个结点也有两个指针,它们分别指向前一个结点和后一个结点.所以这两种数据结构的结点是一致,二叉搜索树之所以为二叉搜索树,双向链表之所以为双向链表,只是因为两个指针的指向不同而已 思路

PAT 天梯赛 是否同一棵二叉搜索树&#160;&#160;&#160;(25分)(二叉搜索树)

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数NNN (≤10\le 10≤10)和LLL,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出NNN个以空格分隔的正整数,作为初始插入序列.最后LL

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

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始插入序列.最后L行,每行给出N个插入的元素,属于L个

7-4 是否同一棵二叉搜索树

7-4 是否同一棵二叉搜索树(25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始插入序

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

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始插入序列.最后L行,每行给出N个插入的元素,属于

是否同一棵二叉搜索树

04-树4 是否同一棵二叉搜索树 (25 分) 给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. 输入格式: 输入包含若干组测试数据.每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数.第2行给出N个以空格分隔的正整数,作为初始

基础数据结构——是否同一棵二叉搜索树

给定一个插入序列就可以唯一确定一棵二叉搜索树.然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到.例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果.于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树. #include<iostream> #include<vector> using namespace std; #define Max_Node 11 #define END -1 typedef struct