目录
- 题目描述:199. 二叉树的右视图(中等)
- 题目接口
- 解题思路
- PS:
题目描述: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:
感谢您的阅读!如果您觉得本篇文章对您有所帮助,请给予博主一个赞喔~