- 题目链接:https://leetcode-cn.com/problems/binary-tree-right-side-view/
- 题目描述:给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
- 、
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:1 <---
/ \
2 3 <---
\ \
5 4 <--- -
这里使用BFS和递归两种方法来实现,如果你不了解BFS(接下来会写),那么你可以下先去看看二叉树的层序遍历(这个是BFS的典型题目),一般二叉树我们都可以使用递归来做。
-
BFS的代码实现(使用BFS可以很好写出来,层序遍历我们取最后一个就可以了)
public List<Integer> rightSideView(TreeNode root) { if (root == null) return new ArrayList<>(); List<Integer> result = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root); while (queue.size() > 0) { 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.offer(node.left); if (node.right != null) queue.offer(node.right); } } return result; }
6.使用递归来实现(递归来实现的话,因为每一层我们需要的是最右边的节点,所以在这里,我们按照 "根" "右" "左"的顺序来访问,这样就可以保证每次访问到的是最右边的节点)
public List<Integer> rightSideView(TreeNode root) { if (root == null) return new ArrayList<>(); List<Integer> result = new ArrayList<>(); dfs(root, result, 0); return result; } private void dfs(TreeNode node, List<Integer> result, int depth) { if (node == null) return; if (depth == result.size()) result.add(node.val); depth++; dfs(node.right, result, depth); dfs(node.left, result, depth); }
LeetCode-199 二叉树的右视图
最新推荐文章于 2022-09-16 22:49:47 发布