題目描述
給出一個數據序列,建立二叉排序樹,並實現插入功能
對二叉排序樹進行中序遍歷,可以得到有序的數據序列
輸入
第一行輸入t,表示有t個數據序列
第二行輸入n,表示首個序列包含n個數據
第三行輸入n個數據,都是自然數且互不相同,數據之間用空格隔開
第四行輸入m,表示要插入m個數據
從第五行起,輸入m行,每行一個要插入的數據,都是自然數且和前面的數據不等
以此類推輸入下一個示例
輸出
第一行輸出有序的數據序列,對二叉排序樹進行中序遍歷可以得到
從第二行起,輸出插入第m個數據后的有序序列,輸出m行
以此類推輸出下一個示例的結果
樣例輸入
1 6 22 33 55 66 11 44 3 77 50 10
樣例輸出
11 22 33 44 55 66 11 22 33 44 55 66 77 11 22 33 44 50 55 66 77 10 11 22 33 44 50 55 66 77
提示
#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; } } } } 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; Tree.addTree(ch); Tree.printTree(Tree.root); cout<<endl; } } return 0; }