1. 题目
2. 分析
本题找到方法后其实很简单,首先我们根据给出的图:
可以得到一个结论,本题其实就是要找每一行最右边的节点,我们之前写过一个题目,二叉树的层序遍历,只需要对层序遍历做一个改造,每次都取最后一个就行了。
3. 代码
public List<Integer> rightSideView(TreeNode root) {
List<Integer> list = new ArrayList<>();
if (root == null) {
return list;
}
//其实是找每一行的最后一个节点
Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
while (!queue.isEmpty()) {
int size = queue.size();
for (int i = 0; i < size; i++) {
root = queue.poll();
if (null != root.left) {
queue.add(root.left);
}
if (null != root.right) {
queue.add(root.right);
}
}
list.add(root.val);
}
return list;
}