题解 | #输出二叉树的右视图#
输出二叉树的右视图
https://www.nowcoder.com/practice/c9480213597e45f4807880c763ddd5f0
class Solution {
public:
map<int, int> pos;
TreeNode* buildTree(vector<int>& pre, vector<int>& in, int pl, int pr, int il, int ir) {
if (pl > pr) return nullptr;
int k = pos[pre[pl]] - il;
auto* root = new TreeNode(pre[pl]);
root->left = buildTree(pre, in, pl + 1, pl + k, il, il + k - 1);
root->right = buildTree(pre, in, pl + k + 1, pr, il + k + 1, ir);
return root;
}
void levelTravel(TreeNode* root, vector<int>& res) {
if (!root) return;
queue<TreeNode*> q;
q.push(root);
while (!q.empty()) {
res.push_back(q.back()->val);
int sz = q.size();
for (int i = 0; i < sz; i++) {
auto* cur = q.front();
q.pop();
if (cur->left) q.push(cur->left);
if (cur->right) q.push(cur->right);
}
}
}
vector<int> solve(vector<int>& preOrder, vector<int>& inOrder) {
for (int i = 0; i < preOrder.size(); i++) pos[inOrder[i]] = i;
TreeNode* root = buildTree(preOrder, inOrder, 0, preOrder.size() - 1, 0, inOrder.size() - 1);
vector<int> res;
levelTravel(root, res);
return res;
}
};