给出一个数据序列,建立二叉排序树,并实现查找功能
对二叉排序树进行中序遍历,可以得到有序的数据序列
给出一个数据序列,建立二叉排序树,并实现查找功能
对二叉排序树进行中序遍历,可以得到有序的数据序列
第一行输入t,表示有t个数据序列
第二行输入n,表示首个序列包含n个数据
第三行输入n个数据,都是自然数且互不相同,数据之间用空格隔开
第四行输入m,表示要查找m个数据
从第五行起,输入m行,每行一个要查找的数据,都是自然数
以此类推输入下一个示例
第一行输出有序的数据序列,对二叉排序树进行中序遍历可以得到
从第二行起,输出查找结果,如果查找成功输出查找次数,如果查找失败输出-1
以此类推输出下一个示例的结果
#include<iostream> using namespace std; class CNode { public: int data; CNode *left; CNode *right; CNode() { left=right=NULL; } }; class BStree { public: CNode *root; BStree() { root=NULL; } void addTree(int number) { CNode *t=root; while(true) { if(number<t->data) { if(t->left==NULL) { t->left=new CNode(); t->left->data=number; return; } else { t=t->left; } } else { if(t->right==NULL) { t->right=new CNode(); t->right->data=number; return; } else { t=t->right; } } } } int findtimes(int number) { CNode *t=root; int times=1; while(true) { if(t==NULL) return -1; if(number==t->data) return times; else if(number<t->data) { t=t->left; times++; } else { t=t->right; times++; } } return times; } void printTree(CNode *p) { if(p) { printTree(p->left); cout<<p->data<<" "; printTree(p->right); } } }; int main() { int T; cin>>T; while(T--) { int n; cin>>n; BStree Tree; for(int i=0;i<n;i++) { int c; cin>>c; if(i==0) { Tree.root=new CNode(); Tree.root->data=c; } else { Tree.addTree(c); } } Tree.printTree(Tree.root); cout<<endl; int m; cin>>m; while(m--) { int ch; cin>>ch; cout<<Tree.findtimes(ch)<<endl; } } return 0; }
原文:https://www.cnblogs.com/SZU-DS-wys/p/12183028.html