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

    xiaoxiao2026-03-10  14

    题目描述

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

    输入

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

    输出

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

    示例输入

    1 2 2 1 20

    示例输出

    2 1 20

    提示

    这个题目有一点非常坑理论上二叉排序树是没有相同的元素的,而后台好像有一点漏洞

    如果你 考虑相同时的情况反而不过了;if(T->data==key)  return 0;反而worry answer

    TVT,心累!

    #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int k; //定义树 typedef struct BiTNode { int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //插入结点 int Charu(BiTree &T,int key) { if(T == NULL) { T=new BiTNode; T->data=key; T->lchild=T->rchild=NULL; return 1; } // if(key==T->data) // return 0;//不能有相同值//后台的原因这个得去 if(key <= T->data)//递归<span style="white-space:pre"> </span>//后台允许有相同元素 return Charu(T->lchild,key); else return Charu(T->rchild,key);//递归 } //建立树 void create(BiTree &T,int a[],int n) { T=NULL; int i; for(i=0;i<n;i++) { Charu(T,a[i]); } } //中序输出 void Inord(BiTree &T) { if(T) { Inord(T->lchild); if(k==1) { cout<<T->data; k++; } else cout<<" "<<T->data; Inord(T->rchild); } } int main() { int n,i,a[10000]; BiTree T; while(~scanf("%d",&n)) { for(i=0;i<n;i++) { scanf("%d",&a[i]); } create(T,a,n); k=1; Inord(T); cout<<endl; } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-1307818.html
    最新回复(0)