题目描述:
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
Note:
- There will only be
'('
,')'
,'-'
and'0'
~'9'
in the input string. - An empty tree is represented by
""
instead of"()"
.
class Solution {
public:
TreeNode* str2tree(string s) {
if(s=="") return NULL;
int i=0;
while(i<s.size()&&((s[i]>='0'&&s[i]<='9')||s[i]=='-')) i++;
TreeNode* node=new TreeNode(stoi(s.substr(0,i)));
s=s.substr(i);
if(s=="") return node;
int left_count=0;
int j=0;
while(j<s.size())
{
if(s[j]=='(') left_count++;
else if(s[j]==')') left_count--;
if(left_count==0) break;
j++;
}
node->left=str2tree(s.substr(1,j-1));
s=s.substr(j+1);
if(s=="") return node;
node->right=str2tree(s.substr(1,s.size()-2));
return node;
}
};