1,问题描述
199. 二叉树的右视图
难度:中等
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
**输入:**root = [1,2,3,null,5,null,4]
输出:[1,3,4]
解释:

示例 2:
**输入:**root = [1,2,3,4,null,null,null,5]
输出:[1,3,4,5]
解释:

示例 3:
**输入:**root = [1,null,3]
输出:[1,3]
示例 4:
**输入:**root = []
输出:[]
提示:
- 二叉树的节点个数的范围是
[0,100]
-100 <= Node.val <= 100
2,初步思考
依据先验知识,我想到了层序遍历,选取每层最后一个元素
在看了官方题解后,发现其实我这个层序遍历的是bfs广度优先搜索算法,然后还有一个深度优先搜索算法
3,代码处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| import support.TreeNode;
import java.util.ArrayList; import java.util.List;
public class _199二叉树的右视图 { public List<Integer> rightSideView_bfs(TreeNode root) { List<Integer> res = new ArrayList<>(); List<TreeNode> temp = new ArrayList<>(); if (root == null) { return res; } temp.add(root); while (!temp.isEmpty()) { res.add(temp.get(temp.size() - 1).val); List<TreeNode> tempCur = new ArrayList<>(); for (TreeNode treeNode : temp) { if (treeNode != null) { if (treeNode.left != null) tempCur.add(treeNode.left); if (treeNode.right != null) tempCur.add(treeNode.right); } } temp = tempCur; } return res; }
public List<Integer> rightSideView_dfs(TreeNode root) { dfs(root, 0); return res; }
List<Integer> res = new ArrayList<>();
private void dfs(TreeNode root, int depth) { if (root == null) return; if (res.size() == depth) { res.add(root.val); } dfs(root.right, depth + 1); dfs(root.left, depth + 1); } }
|