题目描述:199. 二叉树的右视图(中等)
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
LeetCode做题链接:LeetCode二叉树的右视图
示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:
输入: [1,null,3]
输出: [1,3]
示例 3:
输入: []
输出: []
提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100
题目接口
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
}
}
解题思路
主要思路是通过层序遍历(Breadth-First Search,BFS)来获取每一层最右边的节点。具体步骤如下:
- 创建一个空的结果列表
res
,用于存储每一层最右边的节点值。 - 如果根节点为空,则直接返回空的结果列表。
- 创建一个队列
queue
,用于进行层序遍历。将根节点加入队列。 - 当队列不为空时,进行循环。在每次循环中:
a. 获取当前层的节点个数size
。
b. 遍历当前层的每个节点,将其从队列中取出。
c. 如果当前节点有左子节点,将左子节点加入队列;如果当前节点有右子节点,将右子节点加入队列。
d. 如果当前节点是当前层的最后一个节点,将其值加入结果列表res
。 - 返回结果列表
res
。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<Integer> rightSideView(TreeNode root) {
// 创建一个空的结果列表
List<Integer> res = new ArrayList<>();
// 如果根节点为空,直接返回空的结果列表
if (root == null) {
return res;
}
// 创建一个队列,用于层序遍历
Queue<TreeNode> queue = new LinkedList<>();
// 将根节点加入队列
queue.offer(root);
// 当队列不为空时,进行循环
while (!queue.isEmpty()) {
// 获取当前层的节点个数
int size = queue.size();
// 遍历当前层的每个节点
for (int i = 0; i < size; i++) {
// 取出队首节点
TreeNode node = queue.poll();
// 如果当前节点有左子节点,将左子节点加入队列
if (node.left != null) {
queue.offer(node.left);
}
// 如果当前节点有右子节点,将右子节点加入队列
if (node.right != null) {
queue.offer(node.right);
}
// 如果当前节点是当前层的最后一个节点,将其值加入结果列表
if (i == size - 1) {
res.add(node.val);
}
}
}
// 返回结果列表
return res;
}
}
成功!
PS:
感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个赞喔~