1. 题目
2. 解法
什么是二叉树的右视图
二叉树的右视图是指从二叉树的右侧看,能够看到的节点的值的序列
例如,给定一个二叉树:
1
/ \
2 3
\ \
5 4
从右侧看,能够看到的节点的值是 [1, 3, 4],这就是二叉树的右视图。
一种求解二叉树的右视图的方法是使用层序遍历,每次记录每一层的最后一个节点的值,作为右视图的一部分。
实现思路
一种可能的解法是:使用层序遍历,每次记录每一层的最后一个节点的值,作为右视图的一部分
- 首先,创建一个空的结果列表,用于存放右视图的节点值。
- 然后,判断根节点是否为空,如果为空,就直接返回空列表。
- 接着,创建一个队列,用于层序遍历二叉树。将根节点入队。
- 然后,进入一个循环,当队列不为空时,执行以下操作:
- 获取当前层的节点数,记为size。
- 遍历当前层的节点,每次出队一个节点,记为node。
- 如果当前节点是当前层的最后一个节点(即i == size - 1),就将它的值加入结果列表。
- 如果当前节点有左子节点,就将左子节点入队。
- 如果当前节点有右子节点,就将右子节点入队。
- 最后,返回结果列表。
这样,我们就可以按照从上到下,从右到左的顺序,获取每一层的最右边的节点的值,组成右视图。
实现
public static List<Integer> rightSideView(TreeNode root) { List<Integer> ans = new ArrayList<>(); if (root == null) { return ans; } Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.isEmpty()) { int size = queue.size(); for (int i = 0; i < size; i++) { TreeNode node = queue.poll(); if (i == size - 1) { ans.add(node.val); } if (node.left != null) queue.offer(node.left); if (node.right != null) queue.offer(node.right); } } return ans; }