華中科技大學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'爲結束標誌

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章