LeetCode 199. 二叉树的右视图

199. 二叉树的右视图

解题思路

  1. 先访问右子树,再访问左子树,这样就能保证在每一层访问到的第一个节点就是该层最右边的节点
  2. 层序遍历,将每一层队列中最后一个节点的值保存下来即可

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> ans = new ArrayList<>();
dfs(root, 0, ans);
return ans;
}

public void dfs(TreeNode node, int depth, List<Integer> ans) {
if(node == null) {
return;
}
// 如果当前访问的深度等于结果列表的长度,说明这是该层访问到的第一个节点(最右边的节点),将其值添加到结果列表中
if(depth == ans.size()) {
ans.add(node.val);
}
dfs(node.right, depth + 1, ans);
dfs(node.left, depth + 1, ans);
}
}

层序遍历

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root == null) {
return res;
}
ArrayDeque<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
while(!queue.isEmpty()) {
int size = queue.size();
TreeNode rNode = null;
for(int i = 0; i < size; i ++) {
TreeNode node = queue.poll();
rNode = node;
if(node.left != null) queue.offer(node.left);
if(node.right != null) queue.offer(node.right);
}
if(rNode != null) {
res.add(rNode.val);
}
}
return res;
}
}

LeetCode 199. 二叉树的右视图
https://sowink.cn/2026/02/08/LeetCode-199-二叉树的右视图/
作者
Xurx
发布于
2026年2月8日
许可协议