抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。


思路

  • 二叉树的层序遍历,但仅仅在结果集中加入每层的最后一个节点的值。
  • 若考虑通过深度遍历去遍历右子树,但从 右视图 视角来看,如果右子树为空,则右视图会看到左子树的最右边的节点,因此这个思路不正确。

学习点

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode() : val(0), left(nullptr), right(nullptr) {}
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
};

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
// 层序遍历,只弹出最后一个节点
vector<int> res;
if (root == nullptr)
return res;
queue<TreeNode*> qe;
qe.push(root);
while (!qe.empty())
{
int node_num = qe.size();
for (int i = 0; i < node_num; i++)
{
auto tmp = qe.front();
qe.pop();

if (i == node_num - 1)
res.push_back(tmp->val);
if (tmp->left)
qe.push(tmp->left);
if (tmp->right)
qe.push(tmp->right);
}
}

return res;
}
};