二叉树?右视图
题目:
给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
题目分析
- 要求:输出每一层的最右节点
分析
用队列存储每一层节点
提取每一层的最右节点即可
解题思路
变量 | 作用 |
---|---|
line | 存放层节点的队列 |
过程
根结点放入队列
当队列非空
- 取出队首元素
- for循环反映每一层的结点个数
- 结点的左右孩子结点放入队列
- 最右边的结点放入队列
- 重复2,3,4
代码如下
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
if(!root) return {};
queue<TreeNode*> line{{root}};
vector<int> ans;
while (!line.empty()) {
int cnt = line.size();
for(int i = 0; i < cnt; ++i) {
TreeNode* temp = line.front();
line.pop();
if(temp->left) line.push(temp->left);
if(temp->right) line.push(temp->right);
if(i == cnt - 1) ans.push_back(temp->val); //每一层的最右边节点放入结果
}
}
return ans;
}
};