原题目:https://leetcode-cn.com/problems/recover-a-tree-from-preorder-traversal/
思路:
我们使用两个队列分别存储深度(数字前面 - 的个数)和 值。进行深度优先遍历。
如果深度队列的头结点的值 和 传入的depth不相等,那么就返回null,否则就构建树。
代码:
class Solution {
public:
TreeNode* build(queue<int>& d,queue<int>& v,int depth){
if(d.front()!=depth) return NULL;
TreeNode* root = new TreeNode(v.front());
d.pop();v.pop();
root-> left = build(d,v,depth+1);
root->right = build(d,v,depth+1);
return root;
}
TreeNode* recoverFromPreorder(string S) {
int left=0;
queue<int> d,v;
for(int i=0;i<S.size();i++){
if(S[i]!='-'){
d.push(i-left);
left = i;
while(i<S.size() && S[i]!='-') i++;
v.push(stoi(S.substr(left,i-left)));
left = i;
}
}
return build(d,v,0);
}
};