Only different with preorder and postorder are the root start from the beginning for preorder.
1 /**2 * Definition for binary tree3 * struct TreeNode {4 * int val;5 * TreeNode *left;6 * TreeNode *right;7 * TreeNode (int x): Val (x), left (null), right (null) {}8 * };9 */Ten classSolution { One Public: ATreeNode *gettree (vector<int> &iv, vector<int> &PV,intIstintIedintPstintPED) { - if(Ist > IED)returnNULL; - intCurrent =-1, Len =0; the for(inti = ist; I <= IED; i++) { - if(Pv[pst] = =Iv[i]) { -Current =i; - Break; + } - } +Len = current-ist; ATreeNode *root =NewTreeNode (Pv[pst]); atRoot->left = Gettree (iv, PV, ist, current-1, pst+1, pst+len); -Root->right = Gettree (iv, PV, current+1, IED, pst+len+1, PED); - } - -TreeNode *buildtree (vector<int> &preorder, vector<int> &inorder) { - if(inorder.size () = =0|| Inorder.size ()! = Preorder.size ())returnNULL; in returnGettree (inorder, preorder,0, Inorder.size ()-1,0, Preorder.size ()-1); - } to};
Leetcode–refresh–construct Binary Tree from inorder and preorder traversal