You need to construct a binary tree from a string consisting of parenthesis and integers.
The whole input represents a binary tree. It contains an integer followed by zero, one or two pairs of parenthesis. The integer represents the root's value and a pair of parenthesis contains a child binary tree with the same structure.
You always start to construct the left child node of the parent first if it exists.
Example:
Input: "4(2(3)(1))(6(5))"Output: return the tree root node representing the following tree: 4 / \ 2 6 / \ / 3 1 5
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public: TreeNode* str2tree(string s) { if(s.size()==0) return NULL; int pos = s.find_first_of('('); if(pos==std::string::npos) { TreeNode*root = new TreeNode(stoll(s)); return root; } int val = stoll(s.substr(0,pos)); stackstk; stk.push(s[pos]); pos++;//skip '(' int left = pos; while(!stk.empty()&&pos++ < s.size()) { if(pos left = str2tree(leftpart); if(pos+2 0) rightpart.pop_back(); root->right = str2tree(rightpart); } return root; }};