给定一棵二叉树,采用广度优先搜索(BFS)算法,返回右视图所有节点的值。其中右视图定义为:二叉树的右视图是从树的右侧看过去时可见的节点集合,即右视图中的每个节点都是某一层中最右侧的节点。
struct TreeNode {
int val;
TreeNode* left;
TreeNode* right;
TreeNode(int x): val(x), left(nullptr), right(nullptr) {}
};
vector<int> rightSideView(TreeNode* root) {
unordered_map<int, int> rightmostValueAtDepth;
int max_depth = -1;
queue<TreeNode*> nodeQueue;
queue<int> depthQueue;
nodeQueue.push(root);
depthQueue.push(0);
while (!nodeQueue.empty()) {
TreeNode* node = nodeQueue.front(); nodeQueue.pop();
int depth = depthQueue.front(); depthQueue.pop();
if (node != NULL) {
max_depth = max(max_depth, depth);
rightmostValueAtDepth[depth] = node->val;
nodeQueue.push(node->left);
nodeQueue.push(node->right);
depthQueue.push(______);
depthQueue.push(______);
}
}
vector<int> rightView;
for (int depth = 0; ______; ++depth) {
rightView.push_back(rightmostValueAtDepth[depth]);
}
return rightView;
};
A.
depth
depth
depth < max_depthB.
depth + 1
depth + 1
depth <= max_depthC.
depth + 1
depth + 1
depth < max_depthD.
depth
depth
depth <= max_depth根据上下文和C++语法规则确定空缺处应填的内容,关注函数调用参数、表达式和返回值类型。
填空时注意语法完整性:分号、括号匹配、函数参数类型和个数、返回值类型。
【考点】二叉树层次遍历|右视图|BFS深度递推
GESP 六级"高级数据结构与算法"模块核心考点。命题人卡住的是"层次遍历中深度值传递"——六级考生容易混淆"节点值"和"深度值",把 depth 当成存节点值的容器,导致后续循环条件全错。