http://www.geeksforgeeks.org/construct-tree-from-given-inorder-and-preorder-traversal/
1 #include <iostream> 2 #include <vector> 3 #include <algorithm> 4 #include <queue> 5 #include <stack> 6 #include <string> 7 #include <fstream> 8 using namespace std; 9 10 struct node { 11 char data; 12 struct node *left, *right; 13 node() : data(0), left(NULL), right(NULL) { } 14 node(int d) : data(d), left(NULL), right(NULL) { } 15 }; 16 17 18 void prints(node *root) { 19 if (!root) return; 20 prints(root->left); 21 cout << root->data << " "; 22 prints(root->right); 23 } 24 25 node *buildtree(char in[], char pre[], int beg, int end) { 26 static int preindex = 0; 27 if (beg > end) return NULL; 28 node *root = new node(pre[preindex++]); 29 int index = beg; 30 for (int i = beg; i <= end; i++) { 31 if (in[i] == root->data) { 32 index = i; 33 break; 34 } 35 } 36 root->left = buildtree(in, pre, beg, index-1); 37 root->right = buildtree(in, pre, index+1, end); 38 return root; 39 } 40 41 int main() { 42 char in[6] = {'D', 'B', 'E', 'A', 'F', 'C'}; 43 char pre[6] = {'A', 'B', 'D', 'E', 'C', 'F'}; 44 int len = 6; 45 node *root = buildtree(in, pre, 0, len-1); 46 prints(root); 47 return 0; 48 }