题目描述
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
样例描述
思路
方法一:BFS
- 层序遍历,每次存下每一层的最后一个,就是右视图。
- 借助一个队列,注意是队列就不要使用push,pop这种方法,否则会当成栈。
方法二: DFS
- 将DFS的访问顺序改为根结点->右子树->左子树。保证每次都是先访问右边的,这样最后就是右视图。
- 注意可能会经过同一层很多次,但只用存下第一次访问的,所以设置一个depth变量记录当前深度,如果等于res说明结果集中该层还没有存储过,不等于说明已经存过了。
代码
BFS:
/**
* 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> res = new ArrayList<