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

来源:互联网 发布:固结实验数据 编辑:程序博客网 时间:2024/05/19 22:06

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

输入格式:

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

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

输出格式:

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

输入样例:

4 23 1 4 23 4 1 23 2 4 12 12 11 20

输出样例:

YesNoNo

#include<iostream>#include<fstream>#include<vector>using namespace std;struct Node{Node* left;Node* right;int digit;};void Print(vector<int> a,int N){for(int i=0;i<N;++i){cout << a[i] << " ";}cout << endl;}void InOrder(Node* H){if(H){InOrder(H->left);cout << H->digit << " ";InOrder(H->right);}}Node* insert(Node * Head,int digit){if(Head==nullptr){Head = new Node;Head->left = Head->right = nullptr;Head->digit = digit;}else{if(digit<Head->digit ){Head->left = insert(Head->left ,digit);}else if(digit>Head->digit  ){Head->right = insert(Head->right ,digit);}}return Head;}Node* CreateBalanceTree(vector<int> v){if(v.size()==0){return nullptr;}Node* Head=nullptr;for(size_t i=0;i<v.size();++i){if(i==0){Head = insert(nullptr,v[0]);}else{Head = insert(Head, v[i]);}}return Head;}void PreOrder(Node* H,vector<int>& v,int &index){if(H){v[index++] = H->digit;PreOrder(H->left ,v,index);PreOrder(H->right ,v,index);}}void SameBalancedBinaryTree(Node* H1,Node * H2,int N){int index1 = 0, index2 = 0;vector<int> v1(100), v2(100);PreOrder(H1, v1, index1);PreOrder(H2, v2, index2);int flag = 1;for(int i=0;i<N;++i){if(v1[i]!=v2[i]){flag = 0;break;}}if(flag==1){cout << "Yes" << endl;}else{cout << "No" << endl;}}int main(){//ifstream inFile("C:\\Users\\DELL\\Desktop\\in.txt",ios::in);int N, L;while(cin>>N>>L){vector<int> v1;for(int i=0;i<N;++i){int a;cin >> a;v1.push_back(a);}Node* H1 = CreateBalanceTree(v1);for(int j=0;j<L;++j){vector<int> v2;for (int k = 0; k<N; ++k) {int a;cin >> a;v2.push_back(a);}Node* H2 = CreateBalanceTree(v2);SameBalancedBinaryTree(H1, H2,N);delete H2;}delete H1;}//inFile.close();system("pause");return 0;}

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小明看免费成年人现频 中国文字幕小明23免费 年轻昨晚病情姐弟化文字幕 中国文字幕小明47免费台湾 文字幕51页小明 97资9源总站公开中文 中国文字免费小明23 看了七八遍的电视剧 漂亮妻子被老板侵犯电影 中国文字幕小明12免费 人人视频中文字幕 一本书120页小明 一边打电话一边被侵犯中文字幕 被维修空调的工人侵犯 中交字幕78页小明 儿子曰他妈免费视频 夏目彩春中文字幕父 被儿子不良的同学侵犯中文字幕 夏目彩春不速之客中文字幕 上司侵犯夏目彩春下载链接 健身教练夏目彩春 边打电话边被侵犯中文字幕 一个女的在厨房被水电工侵犯 中文字幕侵犯上司影音先锋 希岛爱理视频水电工侵犯 夏日彩春经典作品视频 被水电工掠夺的妻子 多爱井野再次被水电工 维修工强家庭主妇 满员电车大腿颤抖3 公交汉痴未删减版 弟弟的妻子在线播放 妻子被修空调的白玩了一下午 pz505被水电工侵 中文字幕侵犯妻子 妻子被楼下修理工白玩 边打电话边骗她老公在跑步 中山理莉 中文字幕 在线播放 白石利奈 在线 20岁女孩被四个强壮男电影 边打电话边做女客服中文版