二叉树的右视图

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

示例 1:

输入:root = [1,2,3,null,5,null,4]

输出:[1,3,4]

解释:

img

示例 2:

输入:root = [1,2,3,4,null,null,null,5]

输出:[1,3,4,5]

解释:

img

示例 3:

输入:root = [1,null,3]

输出:[1,3]

示例 4:

输入:root = []

输出:[]

提示:

  • 二叉树的节点个数的范围是 [0,100]
  • -100 <= Node.val <= 100

使用中序遍历,将每一层最右边节点的值加入答案

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

class Solution {
private static int max = 102;
private List<Integer> list = new ArrayList<>();
private TreeNode[] queue = new TreeNode[max];
private int l;
private int r;

public List<Integer> rightSideView(TreeNode root) {
if (root == null) {
return list;
}
queue[r++] = root;
while (l < r) {
int size = r - l;
for (int i = 0; i < size; i++) {
TreeNode cur = queue[l++];
if (i == size - 1) { //最后一次遍历出去的节点是该层最右节点
list.add(cur.val);
}
if (cur.left != null) {
queue[r++] = cur.left;
}
if (cur.right != null) {
queue[r++] = cur.right;
}
}
}
return list;
}
}