参考:https://www.cnblogs.com/grandyang/p/11149132.html
”这里我们需要一个全局变量 cur,表示当前遍历字符串S的位置,递归函数还要传递个当前的深度 level。在递归函数中,首先还是要提取短杠的个数,但是这里有个很 tricky 的地方,我们在统计短杠个数的时候,不能更新 cur,因为 cur 是个全局变量,当统计出来的短杠个数跟当前的深度不相同,就不能再继续处理了,如果此时更新了 cur,而没有正确的复原的话,就会出错。博主成功入坑,检查了好久才找出原因。当短杠个数跟当前深度相同时,我们继续提取出结点值,然后新建出结点,对下一层分别调用递归函数赋给新建结点的左右子结点,最后返回该新建结点即可“
/**
* 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:
int cur;//global variable
TreeNode* recover(string S, int &cur, int level){
int cnt = 0, n = S.size();
while(cur+cnt<n&&S[cur+cnt]=='-')cnt++;
if(cnt!=level)return nullptr;
cur+=cnt;
int val=0;
while(cur<n&&S[cur]!='-'){
val = 10*val + S[cur] - '0';
++cur;
}
TreeNode* res = new TreeNode(val);
res->left = recover(S, cur, level+1);
res->right = recover(S, cur, level+1);
return res;
}
TreeNode* recoverFromPreorder(string S) {
cur = 0;
return recover(S, cur, 0);
}
};