二叉排序树

来源:互联网 发布:数据信息加工 编辑:程序博客网 时间:2024/06/05 17:22



/*author:jzdate:2014 09 07*//*题目1201:二叉排序树时间限制:1 秒内存限制:32 兆特殊判题:否提交:3289解决:1397题目描述:输入一系列整数,建立二叉排序数,并进行前序,中序,后序遍历。输入:输入第一行包括一个整数n(1<=n<=100)。接下来的一行包括n个整数。输出:可能有多组测试数据,对于每组数据,将题目所给数据建立一个二叉排序树,并对二叉排序树进行前序、中序和后序遍历。每种遍历结果输出一行。每行最后一个数据之后有一个空格。样例输入:51 6 5 9 8样例输出:1 6 5 9 8 1 5 6 8 9 5 8 9 6 1 提示:输入中可能有重复元素,但是输出的二叉树遍历序列中重复元素不用输出。来源:2005年华中科技大学计算机保研机试真题答疑:解题遇到问题?分享解题心得?讨论本题请访问:http://t.jobdu.com/thread-7924-1-1.html*/#include<iostream>#include<string>#include <malloc.h>using namespace std;typedef struct node{int num;node* left;node* right;}node;node* creattree(node* root,int N){int n;node* p;node* tp;node* pre;for (int i=0;i<N;i++){cin>>n;if (0==i){tp=(node*)malloc(sizeof(node));tp->num=n;tp->left=NULL;tp->right=NULL;root=tp;//cout<<"root:"<<root->num<<" "<<endl;}else{p=root;pre=p;while (p!=NULL){if (n<p->num){pre=p;//cout<<"pl:"<<p->num<<endl;p=p->left;}else if (n>p->num){pre=p;//cout<<"pr:"<<p->num<<endl;p=p->right;}elsebreak;}if (NULL==p){tp=(node*)malloc(sizeof(node));tp->num=n;tp->left=NULL;tp->right=NULL;if(n>pre->num){pre->right=tp;node * n1=pre->right;//cout<<"endr:"<<n1->num<<endl;}if (n<pre->num){pre->left=tp;node * nn=pre->left;//cout<<"endl:"<<nn->num<<endl;}}}}return root;}void travel_inorder(node* root){//cout<<"travel"<<endl;if (root){travel_inorder(root->left);cout<<root->num<<" ";travel_inorder(root->right);}}void travel_pre(node* root){if (root){cout<<root->num<<" ";travel_pre(root->left);travel_pre(root->right);}}void travel_beh(node* root){if (root){travel_beh(root->left);travel_beh(root->right);cout<<root->num<<" ";}}int main(){int N;node *root=NULL;while (cin>>N){root=creattree(root,N);travel_pre(root);cout<<endl;travel_inorder(root);cout<<endl;travel_beh(root);cout<<endl;}return 1;}


0 0
原创粉丝点击