LeetCode 199. Binary Tree Right Side View

it2025-09-22  9

题目:

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 <---

本质上就是个level order traversal,第一反应就是level order每层取最右加进去就完事了。

Runtime: 1 ms, faster than 78.65% of Java online submissions for Binary Tree Right Side View.

Memory Usage: 37.4 MB, less than 14.17% of Java online submissions for Binary Tree Right Side View.

/** * 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> result = new ArrayList<>(); if (root == null) { return result; } Queue<TreeNode> queue = new ArrayDeque<>(); 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) { result.add(node.val); } if (node.left != null) { queue.add(node.left); } if (node.right != null) { queue.add(node.right); } } } return result; } }

然后听说这道题还能用递归做,为了练习一下我就写一下吧。嗯,果然不会写。看了答案,就是非常简单的dfs了,递归的时候先递归右边再递归左边,递归函数里加上level和result,每次判断如果当前level == result.size(),就说明我们来到了新的一层。因为是先递归的right,来到新的一层的时候一定是先出现最右的节点,也就是最后要的那个节点,于是就把它加进result里。

Runtime: 0 ms, faster than 100.00% of Java online submissions for Binary Tree Right Side View.

Memory Usage: 37.8 MB, less than 14.17% of Java online submissions for Binary Tree Right Side View.

/** * 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> result = new ArrayList<>(); helper(root, result, 0); return result; } private void helper(TreeNode root, List<Integer> result, int level) { if (root == null) { return; } if (level == result.size()) { result.add(root.val); } helper(root.right, result, level + 1); helper(root.left, result, level + 1); } }

 

最新回复(0)