先聲明一個結構體:二叉樹的三個元素,數據域,左子樹,右子樹。
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; }
