[leetcode]199. Binary Tree Right Side View二叉树右侧视角

it2025-11-27  12


Given a binary tree, imagine yourself standing on the right side of it, return the values of the nodes you can see ordered from top to bottom.

Example:

Input: [1,2,3,null,5,null,4] Output: [1, 3, 4] Explanation: 1 <--- / \ 2 3 <--- \ \ 5 4 <---

 

题意:

给定一个二叉树,

想象自己站在二叉树的右侧

返回所有能看到的node(返回的node的order是从上往下)

 

思路:

dfs,

使其访问顺序为: root --> right --> left

这样访问nodes为:10, 15, 20, 12, 5, 7, 9, 2

用一个level来维护每层关系,  便于把每层最右侧nodes取出来,放入result中

则:(10,0), (15,1), (20,2), (12,2), (5,1), (7,2), (9,3), (2,2)

每次一到达新的level,根据root --> right --> left的访问顺序,该新level最先被访问的node一定是最右侧view 需要输出的node。将其加入result中。

(10,0), (15,1), (20,2), (12,2), (5,1), (7,2), (9,3), (2,2)

result输出: 10, 15, 20, 9

 

代码:

1 public class BinaryTreeRightSideView { 2 public List<Integer> rightSideView(TreeNode root) { 3 List<Integer> result = new ArrayList<>(); 4 // corner case 5 if (root == null) return result; 6 dfs(root, result, 0); 7 return result; 8 } 9 10 public void dfs(TreeNode root, List<Integer> result, int level) { 11 //recursion 的base case 12 if (root == null) { 13 return; 14 } 15 if (level == result.size()) { 16 result.add(root.val); 17 } 18 19 dfs(root.right, result, level + 1); 20 dfs(root.left, result, level + 1); 21 22 } 23 }

 

 

转载于:https://www.cnblogs.com/liuliu5151/p/9114744.html

相关资源:数据结构—成绩单生成器
最新回复(0)