Recursive
1 # include <iostream> 2 # include <vector> 3 using namespace STD; 4 5 struct treenode {6 int val; 7 treenode * left; 8 treenode * right; 9 treenode (int x): Val (x), left (null), right (null) {}10}; 11 12 class solution {13 public: 14 typedef vector <int >:: iterator ITER; 15 treenode * buildtree (vector <int> & preorder, vector <int> & inorder) {16 return buildtreerecur (inorder. begin (), inorder. end (), preorder. begi N (), preorder. end (); 17} 18 treenode * buildtreerecur (ITER istart, ITER iend, ITER pstart, ITER pend) 19 {20 if (istart = iend) return NULL; 21 int rootval = * pstart; 22 ITER iterroot = find (istart, iend, rootval); 23 treenode * res = new treenode (rootval ); // create the root node 24 res-> left = buildtreerecur (istart, iterroot, pstart + 1, pstart + 1 + (iterroot-istart )); 25 res-> right = buildtreerecur (iterroot + 1, iend, pstart + 1 + (iterroo T-istart), pend); // The End of the vector is the final element! 26 return res; 27} 28}; 29 30 void inordertraversal (treenode * root) 31 {32 If (root = nullptr) return; 33 inordertraversal (root-> left ); 34 cout <root-> Val <"; 35 inordertraversal (root-> right); 36} 37 void preordertraversal (treenode * root) 38 {39 if (root = nullptr) return; 40 cout <root-> Val <""; 41 preordertraversal (root-> left ); 42 preordertraversal (root-> right); 43} 44 int main () 45 {46 solution s; 47 vector <int> inorder = {2, 4, 1, 5, 3 }; 48 vector <int> preorder = {1, 2, 4, 3, 5}; 49 treenode * root = S. buildtree (preorder, inorder); 50 inordertraversal (Root); 51 cout <Endl; 52 preordertraversal (Root); 53 return 0; 54}
Leetcode-Construct binary tree from preorder and inorder Traversal