分析
- 层序遍历二叉树:
- 使用队列(queue)进行二叉树的层序遍历
- 每次遍历一层节点时,将当前层的所有节点按顺序加入队列,同时将下一层的子节点也加入队列
- 记录右视图的节点值:
- 在遍历当前层时,记录当前层的最后一个节点的值,即为该层右侧视图中可见的节点
- 返回结果:
时间复杂度
时间复杂度:O(n)
,其中 n
是二叉树中的节点数
空间复杂度
空间复杂度:O(w)
,其中 w
是二叉树的最大宽度
C++代码
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
|
class Solution
{
public:
vector<int> rightSideView(TreeNode* root)
{
std::vector<int> res; // 存储右视图节点值
std::queue<TreeNode*> q; // 队列用于层序遍历
if (!root) // 如果树为空,返回空结果
return res;
q.push(root); // 将根节点加入队列
while (!q.empty())
{
int len = q.size(); // 当前层的节点数量
while (len--)
{
TreeNode* temp = q.front(); // 获取当前层的节点
q.pop();
// 如果是当前层的最后一个节点,加入结果集
if (len == 0)
res.push_back(temp->val);
// 将左子节点加入队列
if (temp->left)
q.push(temp->left);
// 将右子节点加入队列
if (temp->right)
q.push(temp->right);
}
}
return res; // 返回右视图节点值
}
};
|