47 lines
2.0 KiB
Markdown
47 lines
2.0 KiB
Markdown
## 题目地址
|
||
https://leetcode-cn.com/problems/binary-tree-right-side-view/
|
||
|
||
## 思路
|
||
|
||
这里再讲一遍二叉树的广度优先遍历(层序遍历)
|
||
|
||
需要借用一个辅助数据结构队列来实现,**队列先进先出,符合一层一层遍历的逻辑,而是用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。**
|
||
|
||
使用队列实现广度优先遍历,动画如下:
|
||
|
||
<video src='../video/102二叉树的层序遍历.mp4' controls='controls' width='640' height='320' autoplay='autoplay'> Your browser does not support the video tag.</video></div>
|
||
|
||
这样就实现了层序从左到右遍历二叉树。
|
||
|
||
建议先做一下这道题目[0102.二叉树的层序遍历](https://github.com/youngyangyang04/leetcode/blob/master/problems/0102.二叉树的层序遍历.md), 在做这道,就会发现这是一道 广度优先搜索模板题目,层序遍历的时候,将每一层的最后元素放入result数组中,
|
||
|
||
层序遍历的时候,将单层的最后面的元素放进数组中,随后返回数组就可以了。
|
||
|
||
代码如下:
|
||
|
||
## C++代码
|
||
|
||
```
|
||
class Solution {
|
||
public:
|
||
vector<int> rightSideView(TreeNode* root) {
|
||
queue<TreeNode*> que;
|
||
if (root != NULL) que.push(root);
|
||
vector<int> result;
|
||
while (!que.empty()) {
|
||
int size = que.size();
|
||
for (int i = 0; i < size; i++) {
|
||
TreeNode* node = que.front();
|
||
que.pop();
|
||
if (i == (size - 1)) result.push_back(node->val);//将每一层的最后元素放入result数组中
|
||
if (node->left) que.push(node->left);
|
||
if (node->right) que.push(node->right);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
};
|
||
```
|
||
|
||
> 更多算法干货文章持续更新,可以微信搜索「代码随想录」第一时间围观,关注后,回复「Java」「C++」 「python」「简历模板」「数据结构与算法」等等,就可以获得我多年整理的学习资料。
|