【問題描述】已知兩個序列,分別表示二叉樹前序走訪和中序遍曆的結果,根據他們建立一個二叉樹,注意處理兩個序列不合法的情況。
【舉例】
如果輸入為:
char preOrder[]={'a','b','d','e','c','f','g'};
char inOrder[]={'d','b','e','a','f','c','g'};
輸出這樣一棵樹:
【代碼】
#include "stdafx.h"#include <iostream>using namespace std;struct BTreeNode{char value;struct BTreeNode *leftchild;struct BTreeNode *rightchild;};//notice:the forth param is referncevoid CreatBTree(char *preOrder,char *inOrder,int len,BTreeNode *&root){BTreeNode *temp=(BTreeNode*)malloc(sizeof(BTreeNode*));temp->value=*preOrder;temp->leftchild=NULL;temp->rightchild=NULL;if(root==NULL)root=temp;if(len==1)return;//record the end of inOrder'left partchar *leftEnd=inOrder;//length of left partint leftLength=0;while(*leftEnd!=*preOrder){++leftLength;//illegalif(leftLength>len)break;++leftEnd;}//length of right partint rightLength=len-leftLength-1;if(leftLength>0)CreatBTree(preOrder+1,inOrder,leftLength,root->leftchild);if(rightLength>0)CreatBTree(preOrder+leftLength+1,inOrder+leftLength+1,rightLength,root->rightchild);}int main(){char preOrder[]={'a','b','d','e','c','f','g'};char inOrder[]={'d','b','e','a','f','c','g'};int len=sizeof(preOrder)/sizeof(char);BTreeNode *root=NULL;CreatBTree(preOrder,inOrder,len,root);return 0;}
【擴充】考慮用前序和後續遍曆的序列建立一棵二叉樹