九度OJ——1009二叉搜索树
来源:互联网 发布:淘宝小号绑定大号 编辑:程序博客网 时间:2024/05/22 10:35
题目描述:
判断两序列是否为同一二叉搜索树序列
输入:
开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束。
接下去一行是一个序列,序列长度小于10,包含(0~9)的数字,没有重复数字,根据这个序列可以构造出一颗二叉搜索树。
接下去的n行有n个序列,每个序列格式跟第一个序列一样,请判断这两个序列是否能组成同一颗二叉搜索树。
输出:
如果序列相同则输出YES,否则输出NO
样例输入:
2
567432
543267
576342
0
样例输出:
YES
NO
思路:
分别利用输入的字符串构造二叉排序树,分别进行前序遍历与中序遍历,然后进行比较。如果对应两个序列完全一样则是同一个二叉排序树,否则不是。
AC代码:
#include <iostream>#include <vector>using namespace std;int N;string str,s;vector<int> pre,pre1;vector<int> in,in1;class BinarySearchTree{ private: int data; BinarySearchTree* lchild; BinarySearchTree* rchild; public: //插入函数 BinarySearchTree* Insert(BinarySearchTree* bst,int data){ if(!bst){ bst = new BinarySearchTree; bst->data = data; bst->lchild = bst->rchild = NULL; }else if(data > bst->data){ bst->rchild = this->Insert(bst->rchild,data); }else if(data < bst->data){ bst->lchild = this->Insert(bst->lchild,data); } return bst; } //前序遍历 void PreorderTraversal(BinarySearchTree* bst,vector<int> &preorder){ if(!bst){ return; } preorder.push_back(bst->data); bst->PreorderTraversal(bst->lchild,preorder); bst->PreorderTraversal(bst->rchild,preorder); } //中序遍历 void InorderTraversal(BinarySearchTree* bst,vector<int> &inorder){ if(!bst){ return; } bst->InorderTraversal(bst->lchild,inorder); inorder.push_back(bst->data); bst->InorderTraversal(bst->rchild,inorder); }};bool isEqual(){ bool flag1,flag2; flag1 = true; //保存前序序列比较结果 for(int i = 0 ; i < pre.size() ; i++){ if(pre[i] != pre1[i]){ flag1 = false; break; } } //若flag1为flase那么无论中序序列比较结果是否一致,肯定不为同一二叉排序树 if(flag1 == false){ return flag1; } flag2 = true; //保存中序序列比较结果 for(int i = 0 ; i < pre.size() ; i++){ if(in[i] != in1[i]){ flag2 = false; break; } } //flag1与flag2都为true则为同一棵二叉排序树,否则不为同一棵二叉排序树 if(flag2 && flag1){ return true; }else{ return false; }}int main(){ while(cin>>N){ if(N == 0){ break; } cin>>str; BinarySearchTree *bst = NULL; pre.clear(); in.clear(); for(int i = 0 ; i < str.length() ; i++){ bst = bst->Insert(bst,str[i]-'0'); } bst->PreorderTraversal(bst,pre); bst->InorderTraversal(bst,in); for(int i = 0 ; i < N ; i++){ BinarySearchTree *bst1 = NULL; s.clear(); pre1.clear(); in1.clear(); cin>>s; for(int j = 0 ; j < s.length() ; j++){ bst1 = bst1->Insert(bst1,s[j]-'0'); } bst1->PreorderTraversal(bst1,pre1); bst1->InorderTraversal(bst1,in1); if(isEqual()){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } } } return 0; }
阅读全文
0 0
- 九度OJ——1009二叉搜索树
- 九度OJ 1009 二叉搜索树
- 九度oj-1009-二叉搜索树
- 九度OJ - 1009 - 二叉搜索树
- 九度OJ 1009 二叉搜索树
- 九度OJ-1009-二叉搜索树
- 九度OJ 1009 二叉搜索树
- 九度OJ 1009:二叉搜索树 (二叉树)
- 九度OJ-题目1009:二叉搜索树
- 九度oj 题目1009:二叉搜索树
- 九度oj:题目1009 二叉搜索树
- 九度OJ,题目1009-二叉搜索树
- 九度 oj 题目1009:二叉搜索树
- 九度OJ-题目1009 二叉搜索树
- 九度OJ 1009: 二叉搜索树 两棵树的判等+二叉搜索树的建立
- 二叉搜索树的建立与遍历 九度oj
- 九度oj 题目1009:二叉搜索树 【ZJU2010考研机试题5】【二叉排序树】
- 九度OJ——1078二叉树遍历
- 多条目加载解析方法,读取和图片缓存
- 桶排序
- 绘制各种图形
- PKU 2774 Long Long Message 后缀数组 最长公共子串
- 关于失业(一)
- 九度OJ——1009二叉搜索树
- [iOS]Mac系统下安装windows共享打印机采坑记
- mybatis逆向工程
- 哥德巴赫猜想
- QT常用实用的界面设计技巧
- python,[WinError 3] 系统找不到指定的路径
- 随便写点
- [C/C++]多态
- 横向滑动的注意事项