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)); stack<char>stk; stk.push(s[pos]); pos++;//skip '(' int left = pos; while(!stk.empty()&&pos++ < s.size()) { if(pos<s.size() && (s[pos]=='('||s[pos]==')')) { if(s[pos]=='(')stk.push('('); if(s[pos]==')')stk.pop(); } } TreeNode *root = new TreeNode(val); string leftpart = s.substr(left,pos-left); root->left = str2tree(leftpart); if(pos+2<s.size()) { string rightpart = s.substr(pos+2); if(rightpart.size()>0) rightpart.pop_back(); root->right = str2tree(rightpart); } return root; } };