樹結構練習——排序二叉樹的中序遍歷
TimeLimit: 1000MS Memory Limit: 65536KB
SubmitStatistic
在樹結構中,有一種特殊的二叉樹叫做排序二叉樹,直觀的理解就是——(1).每個節點中包含有一個關鍵值 (2).任意一個節點的左子樹(如果存在的話)的關鍵值小于該節點的關鍵值 (3).任意一個節點的右子樹(如果存在的話)的關鍵值大于該節點的關鍵值。現給定一組數據,請你對這組數據按給定順序建立一棵排序二叉樹,并輸出其中序遍歷的結果。
Input
輸入包含多組數據,每組數據格式如下。
第一行包含一個整數n,為關鍵值的個數,關鍵值用整數表示。(n<=1000)
第二行包含n個整數,保證每個整數在int范圍之內。
Output
為給定的數據建立排序二叉樹,并輸出其中序遍歷結果,每個輸出占一行。
Example Input
1
2
2
1 20
Example Output
2
1 20
Hint
Author
趙利強
#include<stdio.h>#include<algorithm>#include<string.h>#include<iostream>#include<math.h>#include<queue>#include<stdlib.h>using namespace std;typedef struct node{   int data;   struct node *l;   struct node *r;}tree;void insert(tree*&root,int x){     if(root == NULL)     {        tree*p;        p = (tree*)malloc(sizeof(tree));        p->data = x;        p->l = NULL;        p->r = NULL;        root =  p;     }     else if(x<root->data)     {         insert(root->l,x);     }     else     {        insert(root->r,x);     }}tree* build(tree*root,int a[],int o){    root = NULL;    for(int i= 0;i< o;i++)    {       insert(root,a[i]);    }    return root;}int top;//控制空格輸出void inout(tree*root){     if(root)     {         inout(root->l);         if(top)top=0;         else printf(" ");         printf("%d",root->data);         inout(root->r);     }}int main(){    int n;    while(~scanf("%d",&n))    {       top = 1;        int a[1002],i;        for(i=0;i<n;i++)        scanf("%d",&a[i]);         tree *root;         root = build(root,a,n);         inout(root);         cout<<endl;    }   return 0;}/***************************************************User name: jk160505徐紅博Result: AcceptedTake time: 0msTake Memory: 168KBSubmit time: 2017-02-08 09:01:43****************************************************/ 
新聞熱點
疑難解答