sdut 2128 树结构练习——排序二叉树(BST)的中序遍历

来源:互联网 发布:wap彩票网站源码 编辑:程序博客网 时间:2024/05/16 04:05

树结构练习——排序二叉树的中序遍历

Time Limit: 1000MS Memory Limit: 65536KB
Submit Statistic Discuss

Problem Description

在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
 

Input

输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。

Output

为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
 

Example Input

1221 20

Example Output

21 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;        }        else            cout<<' '<<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);    else        createbtree(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;}

阅读全文
0 0
原创粉丝点击