华中科技大学2011年复试题目

(1)无冗余接受键盘输入的n个字符串,并将其无冗余的存放到对应的字符数组中,在按照每行1串的格式输出这些字符串。15

(2)以单个字符串为数据域,按字典顺序将n个字符串生成一棵二叉搜索树,并且规定左子树小于右子树。10

(3)先序遍历该二叉搜索树并输出结果。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct T{
    char *p;
    struct T* lchild;
    struct T* rchild;
}*BTree,Node;
//建立一个空白点。
Node* create(){
    Node* T=(Node*)malloc(sizeof(Node));
    T->rchild=T->lchild=NULL;
    return T;
}
//二叉树添加点
BTree AddNode(BTree T,char*x){
    if(T==NULL){
        T=create();
        T->p=(char*)malloc(strlen(x)*sizeof(char));
        strcpy(T->p,x);
        return T;
    }
    if(strcmp(T->p,x)>0){
        T->lchild=AddNode(T->lchild,x);
    }else if(strcmp(T->p,x)<0){
        T->rchild=AddNode(T->rchild,x);
    }
    return T;
}
//先序遍历
void PreOrder(BTree T){
    if(T==NULL)return ;
    printf("%s\n",T->p);
    PreOrder(T->lchild);
    PreOrder(T->rchild);
}
//中序遍历
void InOrder(BTree T){
    if(T==NULL)return ;
    InOrder(T->lchild);
    printf("%s\n",T->p);
    InOrder(T->rchild);
}

//后续遍历
void PostOrder(BTree T){
    if(T==NULL)return ;
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%s\n",T->p);
}
int main(void){
    int n,i,count;
    char **str=NULL;
    char c;
    while(scanf("%d",&n)!=EOF){
        fflush(stdin);//清空缓冲区。主要是防止后面读取缓冲区内部的'\n'字符.
        str=(char**)malloc(n*sizeof(char*));
        for(i=0;i<n;i++){
                count=0;
                str[i]=NULL;//定义字符串
            while(scanf("%c",&c)){
                count++;
                str[i]=(char*)realloc(str[i],count*sizeof(char));//动态更新了字符串的空间大小
                if(c=='\n'){
                    str[i][count-1]='\0';break;//字符读取,'\n'字符串跟字符串的标志
                }else{
                    str[i][count-1]=c;
                }
            }
        }
        for(i=0;i<n;i++){
            printf("%s\n",str[i]);
        }
    }
    BTree T=NULL;
    for(i=0;i<n;i++){
        T=AddNode(T,str[i]);
    }
    printf("PreOrder:\n");
    PreOrder(T);
    printf("\n");

return 0;
}

这个版本跟网上另外一个版本的代码有点区别。

我定义字符串不是以空格为结束标志。而是以'\n'为结束标志。网上的另外一个版本是输入的字符串是以空格跟'\n'为结束标志

猜你喜欢

转载自blog.csdn.net/u014128662/article/details/79433688
今日推荐