1. 程式人生 > >根據先序遍歷和中序遍歷建立二叉樹(程式碼)

根據先序遍歷和中序遍歷建立二叉樹(程式碼)

先宣告一個結構體:二叉樹的三個元素,資料域,左子樹,右子樹。

typedef char ElemType;
typedef struct Node 
{
    ElemType data;
    struct Node *lchild,*rchild;
}BitTree;
宣告函式:返回值:二叉樹      pre:先序遍歷字串      in:中序遍歷字串      number:字串長度 BitTree *createBinTreeByPreIn(char *pre,char *in,int number);   二叉樹問題我喜歡使用遞迴方法解決,實現起來比較簡單,但是效率可能有點低。 使用遞迴時最重要的一個就是結束條件,下面是具體實現。 結束條件:當字串長度為0。
BitTree *createBinTreeByPreIn(char
*pre,char *in,int number) { if(number==0) return NULL; char c = pre[0]; int i = 0; while(i<number && in[i]!=c)i++; int leftNumber = i; int rightNumber = number - i - 1; BitTree *node = (BitTree *)malloc(sizeof(BitTree)); node->data = c; node->lchild = createBinTreeByPreIn(&pre[1
],&in[0],leftNumber); node->rchild = createBinTreeByPreIn(&pre[leftNumber+1],&in[leftNumber+1],rightNumber); return node; }

最後主函式測試一下:

int main(int argc,char **argv)
{
    char a[SIZE],b[SIZE];
    BitTree *p;
    while(scanf("%s%s",a,b)!=EOF)
    {
        p = createBinTreeByPreIn(a,b,strlen(a));
        printf(
"\n"); } return 0; }