题意
题解
设当前深度为 d e p dep dep, S S S 的下一个节点深度为 n x t D e p nxtDep nxtDep。 d f s dfs dfs 重构当前根节点,同时维护 S S S 的指针位置。对于满足 d e p > n x t D e p dep>nxtDep dep>nxtDep 的情况,重构左子树;反之, S S S 的指针回退,搜索回溯。右子树同理。
class Solution {
public:
int pos;
TreeNode* dfs(int dep, string &S){
int nxtDep, pre = pos;
while(pos < S.length() && S[pos] != '-') ++pos;
TreeNode* root = new TreeNode (stoi(S.substr(pre, pos-pre)));
pre = pos, nxtDep = 0;
while(S[pos] == '-') ++pos, ++nxtDep;
if(nxtDep > dep) root->left = dfs(nxtDep, S);
else{
pos = pre;
return root;
}
pre = pos, nxtDep = 0;
while(S[pos] == '-') ++pos, ++nxtDep;
if(nxtDep > dep) root->right = dfs(nxtDep, S);
else pos = pre;
return root;
}
TreeNode* recoverFromPreorder(string S) {
if(S.length() == 0) return nullptr;
pos = 0;
return dfs(0,S);
}
};