Solution:
The basic idea is to form the root first; then form the left children; then the right one. So we will use recursion strategy. See code below:
Note: The description for this question is not very clear, for example: the meaning of the '-' (it means negative number actually), and also the number can be larger than 10...
Code:
/**
* 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) {
TreeNode* res;
int n = s.size(), i = 0;
if(n==0) return NULL;
int flag = 1;
if(s[i] == '-'){
flag = -1;
++i;
}
if(i<n&&(s[i]-'0'>=0)&&(s[i]-'0'<=9)) {
int t=0;
while(i<n&&(s[i]-'0'>=0)&&(s[i]-'0'<=9)) t = t*10 + (s[i++]-'0');
res = new TreeNode(flag*t);
}
if(i<n&&s[i]=='('){
int t = 1, ct = i+1;
while(t>0&&ct<n){
if(s[ct]=='(') ++t;
if(s[ct]==')') --t;
++ct;
}
if(t==0)res->left = str2tree(s.substr(i+1, ct-i-1)); //left children;
if(t==0&&ct<n&&s[ct]=='(')res->right = str2tree(s.substr(ct+1, n-ct-2));//right children;
}
return res;
}
};
No comments :
Post a Comment