199. Binary Tree Right Side View
题目大意
Given the root of a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.
中文释义
给定一个二叉树的根节点,想象你站在它的右侧,返回你能看到的节点的值,从上到下排序。
示例
示例 1:
输入: root
= [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:
输入: root
= [1,null,3]
输出: [1,3]
示例 3:
输入: root
= []
输出: []
限制条件
- 树中节点的数量范围是
[0, 100]
。 -100 <= Node.val <= 100
解题思路
方法
该方法使用层次遍历(广度优先搜索)来查找每一层最右侧的节点。
-
处理空树的情况:
- 如果根节点为空,则返回空的结果列表。
-
使用队列进行层次遍历:
- 使用一个队列
node_queue
存储每层的节点。
- 使用一个队列
-
遍历每一层:
- 对于每一层的节点,依次从队列中取出。
- 保存每一层最右侧节点的值。
-
添加子节点到队列:
- 将当前节点的左右子节点(如果存在)添加到队列中,以便下一轮遍历。
-
更新队列大小:
- 更新队列的大小,准备遍历下一层的节点。
-
返回结果:
- 在遍历完所有层次后,返回包含每层最右侧节点值的结果列表。
代码
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
if (root == nullptr) return {};
queue<TreeNode*> node_queue;
vector<int> ans;
node_queue.push(root);
int count = 1;
while (!node_queue.empty()) {
int temp_count = 0;
for (int i = 0; i < count; i++) {
TreeNode* temp_node = node_queue.front();
node_queue.pop();
if (i == count - 1) {
ans.push_back(temp_node -> val);
}
if (temp_node -> left) {
node_queue.push(temp_node -> left);
temp_count++;
}
if (temp_node -> right) {
node_queue.push(temp_node -> right);
temp_count++;
}
}
count = temp_count;
}
return ans;
}
};