19 {
20
21 stack<pair<TreeNode*, int>> st;
22 int i = 0;
23
24
25 while (i < (int)traversal.size())
26 {
27 int level = 0;
28
29
30 while (i < (int)traversal.size() && traversal[i] == '-')
31 {
32 level++;
33 i++;
34 }
35
36 int value = 0;
37
38
39 while (i < (int)traversal.size() && isdigit(traversal[i]))
40 {
41 value = value * 10 + (traversal[i] - '0');
42 i++;
43 }
44
45
47 while (!st.empty() && st.top().second >= level)
48 st.pop();
49
50
51 if (!st.empty())
52 {
53 if (!st.top().first->left)
54 st.top().first->left = node;
55 else
56 st.top().first->
right = node;
57 }
58
59
60 st.push({node, level});
61 }
62
63
64 while ((int)st.size() > 1)
65 st.pop();
66 return st.top().first;
67 }