From df1825bbcfb2d7f4575421d290bc64b7d4c4c6d4 Mon Sep 17 00:00:00 2001 From: Aditya Nand Date: Wed, 1 Aug 2018 00:41:46 +0530 Subject: [PATCH] Updated BinaryTreeFromInorderAndPostorder.cpp --- Trees/BinaryTreeFromInorderAndPostorder.cpp | 37 +++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 Trees/BinaryTreeFromInorderAndPostorder.cpp diff --git a/Trees/BinaryTreeFromInorderAndPostorder.cpp b/Trees/BinaryTreeFromInorderAndPostorder.cpp new file mode 100644 index 0000000..743e93b --- /dev/null +++ b/Trees/BinaryTreeFromInorderAndPostorder.cpp @@ -0,0 +1,37 @@ +/** + * Definition for binary tree + * struct TreeNode { + * int val; + * TreeNode *left; + * TreeNode *right; + * TreeNode(int x) : val(x), left(NULL), right(NULL) {} + * }; + */ +int search(vector &in, int str, int end, int val){ + for(int k=str; k<=end; k++) + if(in[k] == val) + return k; +} + +TreeNode* getTre(vector &post, vector &in, int start, int end, int &treeIndex){ + + if(start > end) + return NULL; + + TreeNode* node = new TreeNode(post[treeIndex--]); + + if(start == end) + return node; + + int root = search(in, start, end, node->val); + + node->right = getTre(post, in, root+1, end, treeIndex); + node->left = getTre(post, in, start, root-1, treeIndex); + + return node; +} + +TreeNode* Solution::buildTree(vector &in, vector &post) { + int treeIndex = in.size()-1; + return getTre(post, in, 0, in.size()-1, treeIndex); +}