199. 二叉树的右视图
1、题目
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4] 输出: [1,3,4]
示例 2:
输入: [1,null,3] 输出: [1,3]
示例 3:
输入: [] 输出: []
提示:
- 二叉树的节点个数的范围是
[0,100]
-100 <= Node.val <= 100
Related Topics
- 树
- 深度优先搜索
- 广度优先搜索
- 二叉树
2、题目分析
3、复杂度最优解代码示例
public List<Integer> rightSideView(TreeNode root) {
List<Integer> result = new ArrayList<>();
// 调用深度优先搜索方法
dfs(root, 0, result);
return result;
}
// 深度优先搜索方法
private void dfs(TreeNode node, int depth, List<Integer> result) {
// 如果节点为空,直接返回
if (node == null) return;
// 如果当前深度等于结果列表的大小,说明是当前深度第一个被访问的节点
if (depth == result.size()) {
// 将该节点的值添加到结果列表中
result.add(node.val);
}
// 优先访问右子树,确保每层最右边的节点会被添加到结果列表中
dfs(node.right, depth + 1, result);
// 再访问左子树
dfs(node.left, depth + 1, result);
}