本文主要是介绍sdut 2128 树结构练习——排序二叉树(BST)的中序遍历,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
树结构练习——排序二叉树的中序遍历
Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss
Problem Description
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
Example Input
1 2 2 1 20
Example Output
2 1 20
#include<iostream>
using namespace std;
int tag;
typedef struct btree
{int data;struct btree *lchild,*rchild;
}btree;
void createbtree(btree *&T,int key)
{if(T==NULL){T=new btree;T->lchild=T->rchild=NULL;T->data=key;return ;}if(key<T->data)createbtree(T->lchild,key);elsecreatebtree(T->rchild,key);
}
void InOrder(btree *b)
{if(b){InOrder(b->lchild);if(!tag){cout<<b->data;tag=1;}elsecout<<' '<<b->data;InOrder(b->rchild);}
}
int main()
{int m,n;btree *T;while(cin>>m){tag=0;T=NULL;for(int i=0;i<m;i++){cin>>n;createbtree(T,n);}InOrder(T);cout<<endl;}return 0;
}
对于排序二叉树的讲解:
#include<iostream>
using namespace std;
int tag;
typedef struct btree
{int data;struct btree *lchild,*rchild;
}btree;
void createbtree(btree *&T,int key)
{if(T==NULL){T=new btree;T->lchild=T->rchild=NULL;T->data=key;return ;}if(key<T->data)createbtree(T->lchild,key);elsecreatebtree(T->rchild,key);
}
void InOrder(btree *b)
{if(b){InOrder(b->lchild);if(!tag){cout<<b->data;tag=1;}elsecout<<' '<<b->data;InOrder(b->rchild);}
}
int main()
{int m,n;btree *T;while(cin>>m){tag=0;T=NULL;for(int i=0;i<m;i++){cin>>n;createbtree(T,n);}InOrder(T);cout<<endl;}return 0;
}
http://blog.csdn.net/stpeace/article/details/9067029
http://blog.csdn.net/hackbuteer1/article/details/7275396
下面的代码等我回来:
#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct btree
{int date;btree *lchild,*rchild;
}btree;
btree *root;
btree *createbtree(btree *&root,int a)
{btree *b=root;//这时候就不对b分配指针空间就不对if(b==NULL){b=(btree *)malloc(sizeof(btree));b->date=a;b->lchild=b->rchild=NULL;return b;}if(a<b->date)createbtree(b->lchild,a);elsecreatebtree(b->rchild,a);
}
void inorder(btree *b)
{if(b!=NULL){inorder(b->lchild);cout<<b->date;inorder(b->rchild);}
}
int main()
{int n;while(cin>>n){int a;root=(btree*)malloc(sizeof(btree));root=NULL;for(int i=0;i<n;++i){cin>>a;root=createbtree(root,a);}inorder(root);cout<<endl;}return 0;
}
#include <iostream>
#include <malloc.h>
using namespace std;
typedef struct btree
{int date;btree *lchild,*rchild;
}btree;
btree *root;
btree *createbtree(btree *&root,int a)
{btree *b=root;//这时候就不对b分配指针空间就不对if(b==NULL){b=(btree *)malloc(sizeof(btree));b->date=a;b->lchild=b->rchild=NULL;return b;}if(a<b->date)createbtree(b->lchild,a);elsecreatebtree(b->rchild,a);
}
void inorder(btree *b)
{if(b!=NULL){inorder(b->lchild);cout<<b->date;inorder(b->rchild);}
}
int main()
{int n;while(cin>>n){int a;root=(btree*)malloc(sizeof(btree));root=NULL;for(int i=0;i<n;++i){cin>>a;root=createbtree(root,a);}inorder(root);cout<<endl;}return 0;
}
这篇关于sdut 2128 树结构练习——排序二叉树(BST)的中序遍历的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!