Given Inorder and Postorder traversal of a tree, construct the binary tree.
Note:
Assume that duplicates does not exist in the tree.
#include <iostream> #include <vector> #include <algorithm>using namespace std;struct TreeNode {int val ; TreeNode *left; TreeNode *right; TreeNode (int x): Val (x), left (null), right (null) {}}; TreeNode *creattree (Vector<int>::iterator in_begin, Vector<int>::iterator in_end, Vector<int>:: Iterator Pos_begin, Vector<int>::iterator pos_end) {if (In_begin = = in_end) return null;vector<int>:: Iterator Rootpos = Pos_end-1;vector<int>::iterator Rootino = Find (In_begin, in_end, *rootpos); auto Lenleft = Distan CE (In_begin, Rootino); TreeNode *root = new TreeNode (*rootpos); root->left = Creattree (In_begin, Rootino, Pos_begin, Pos_begin + lenleft); root ->right = Creattree (Rootino + 1, in_end, Pos_begin + lenleft, rootpos); return root;} TreeNode *buildtree (vector<int> &inorder, vector<int> &postorder) {if (Inorder.empty ()) return NULL; TreeNode *root = new TreeNode (0); Root = Creattree (Inorder.begin (), Inorder.end (), Postorder.begin (), POStorder.end ()); return Root;}
Construct Binary Tree from inorder and Postorder traversal