Q:バイナリツリーが与えられた場合、自分がその右側に立っていて、右側から見えるノード値を上から下に順番に返すことを想像してください。
A:
階層トラバーサル。各レイヤーの最後のトラバーサルを取ります。
public List<Integer> rightSideView(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null)
return res;
Queue<TreeNode> q = new LinkedList<>();
q.add(root);
int size = 1;
while (!q.isEmpty()) {
while (size != 0) {
if (size == 1) {
res.add(q.peek().val);
}
TreeNode curr = q.poll();
if (curr.left != null) {
q.add(curr.left);
}
if (curr.right != null) {
q.add(curr.right);
}
size--;
}
size = q.size();
}
return res;
}