给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例 1:
输入: [1,2,3,null,5,null,4]
输出: [1,3,4]
示例 2:
输入: [1,null,3]
输出: [1,3]
示例 3:
输入: []
输出: []
提示:
二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100
解题思路
- 按照 树跟->右子树->左子树 顺序遍历 每层最先得到的是最右边的结点
- 用哈希表记录每层已经遍历过的最右边结点
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 {
static Map<Integer,Integer> map;
public List<Integer> rightSideView(TreeNode root) {
List<Integer>list=new ArrayList<Integer>();
map=new HashMap<Integer, Integer>();
dfs(root,list,0);
return list;
}
private void dfs(TreeNode root, List<Integer> list,int depth) {
boolean isInsert=false;
if(root==null)
return;
if(!isInsert&&map.get(depth)==null){
list.add(root.val);
isInsert=true;
map.put(depth,1);
}
dfs(root.right,list,depth+1);
dfs(root.left,list,depth+1);
}
}