05年华中科大机试第三题(输入一个字符串,建立一个二叉排序树,并中序遍历输出)
2011-09-10 19:10
197 查看
/*第三题:输入一个字符串,建立一个二叉排序树,并中序遍历输出;*/ /*这里采用了两种遍历,此处是非递归。下面注释的是递归*/ /*测试数据: poiuyt 输出数据;i o p t u y 测试数据: 621345 输出数据: 1 2 3 4 5 6*/ /*程序:*************************爱X的味道 07级华中农业大学计算机系*****************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAX 50 typedef struct Node { char data; struct Node *Lchild; struct Node *Rchild; }Node,*BiTree; typedef struct { BiTree elem[MAX]; int top; }Stack; void InitStack(Stack *s) { s->top=-1; } int Push(Stack *s,BiTree *T) { if(s->top>MAX-1) return 0; s->top++; s->elem[s->top]=(*T); return 1; } int Pop(Stack *s,BiTree *T) { if(s->top<-1) return 0; *T=s->elem[s->top]; s->top--; return 1; } int IsEmpty(Stack s) { if(-1==s.top) return 1; else return 0; } void InsertSortTree(BiTree *tree, char key) { BiTree T; if(*tree == NULL) { T=(BiTree)malloc(sizeof(Node)); T->data=key; T->Lchild=NULL; T->Rchild=NULL; *tree=T; } else if((*tree)->data>key) InsertSortTree(&((*tree)->Lchild),key); else if((*tree)->data<key) InsertSortTree(&((*tree)->Rchild),key); } void CreateSortTree(BiTree *tree,char *str ) { *tree=NULL; int i=0; while(str[i]!='\0') { InsertSortTree(&(*tree),str[i]); i++; } } void InOrdTree(BiTree T) { Stack s; BiTree p=T; InitStack(&s); while(p!=NULL || !IsEmpty(s)) { if(p!=NULL) { Push(&s,&p); p=p->Lchild; } else { Pop(&s,&p); printf(" %c ",p->data); p=p->Rchild; } } printf("\n\n"); } int main() { char str[100]="\0"; BiTree tree; printf("请输入一个字符串:\n\n"); gets(str); CreateSortTree(&tree,str); printf("中序遍历的结果是:\n\n"); InOrdTree(tree); printf("\n\n"); return 0; } /* #include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct Node { char data; struct Node *Lchild; struct Node *Rchild; }Node,*BiTree; void InsertSortTree(BiTree *tree, char key) { BiTree T; if(*tree == NULL) { T=(BiTree)malloc(sizeof(Node)); T->data=key; T->Lchild=NULL; T->Rchild=NULL; *tree=T; } else if((*tree)->data>key) InsertSortTree(&((*tree)->Lchild),key); else if((*tree)->data<key) InsertSortTree(&((*tree)->Rchild),key); } void CreateSortTree(BiTree *tree,char *str ) { *tree=NULL; int i=0; while(str[i]!='\0') { InsertSortTree(&(*tree),str[i]); i++; } } void InOrdTree(BiTree tree) { if(tree !=NULL) { InOrdTree(tree->Lchild); printf(" %c ",tree->data); InOrdTree(tree->Rchild); } } int main() { char str[100]="\0"; BiTree tree; printf("请输入一个字符串:\n\n"); gets(str); CreateSortTree(&tree,str); printf("中序遍历的结果是:\n\n"); InOrdTree(tree); printf("\n\n"); return 0; }*/
相关文章推荐
- 05年华中科大机试第二题(输入一个四行五列的矩阵,找出每列最大的两个数)
- 06年华中科大机试第三题(输入一个ip地址串,判断是否合法)
- 华为机试——通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串
- 05年华中科大机试第一题(对给定的一个字符串,找出有重复的字符,并给出其位置)
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
- 输入一个表示整数的字符串,把该字符串转换成整数并输出
- 黑马程序员 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个
- C++输入一个字符串,将其逆序输出
- 2014华为机试-判断输入的字符串是不是一个有效的IP地址
- 输入一个表示整数的字符串,把该字符串转换成整数并输出。
- 第九周C++任务四。建立一个二维数组类Douary,完成矩阵的输入、输出、加、减、相等判断等操作
- 输入一个字符串,将字符串中的单词逆序输出
- Ex7_2使输入的一个字符串按反序存放,在主函数中输入和输出­字符串
- 题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。
- 输入一个整数,将这个整数以字符串的形式逆序输出
- 输入为一个字符串和字节数,输出为按字节截取的字符串
- 输入一个字符串,输出该字符串中字符的所有组合
- 华为:输入一个字符串,删除重复前面的字符,其余字符按原样顺序输出
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。