根據先序遍歷和中序遍歷建立二叉樹(程式碼)
阿新 • • 發佈:2018-12-07
先宣告一個結構體:二叉樹的三個元素,資料域,左子樹,右子樹。
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; }