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

mac2022-06-30  33

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

                                                                                            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 <bits/stdc++.h> using namespace std; int l; int a[10086]; typedef struct node {     int data;     struct node *lc,*rc; }tree; tree *creat(tree *root,int k) {     if(root==NULL)     {         root=new tree;         root->data = k;         root->lc = root->rc = NULL;     }     else     {         if(root->data>k)         {             root->lc = creat(root->lc,k);         }         else{             root->rc = creat(root->rc,k);         }     }     return root; } void inordertraval(tree *root) {     if(root)     {         inordertraval(root->lc);         //printf("%c",root->data);         a[l++] = root->data;         inordertraval(root->rc);     } } int main() {     int i,n,k;     struct node *root;     root = new tree;     while(scanf("%d",&n)!=EOF)     {         l=0;         root = NULL;         for(i=0;i<n;i++)         {             scanf("%d",&k);             root=creat(root,k);         }         inordertraval(root);         for(i=0;i<l;i++)         {             printf(i==0?"%d":" %d",a[i]);         }         printf("\n");     }     return 0; }

转载于:https://www.cnblogs.com/CCCrunner/p/6444585.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)