给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4]
输出: [1, 3, 4]
解释:
1 <---
/ \
2 3 <---
\ \
5 4 <---
思路:
设置初始深度 depth=0
按 根->右->左 的顺序进行遍历,
如果节点的层>depth,就把这个节点值添加到List里面
每到叶子节点一次就更新depth一次,
如果叶子节点层>depth,那么depth就等于叶子节点层
示例:
层1 1 <---
/ \
层2 2 3 <---
\ \
层3 5 4 <---
/
层4 6 <---
初始depth=0,按照根->右->左的顺序遍历
节点1,3,4均大于0,添加到list里
节点4为叶子节点,层号3>depth,所以depth=3
继续遍历,节点2,5层号均小于depth,不添加,节点6的depth大于3,添加。
节点6为叶节点,层号4>depth,所以depth=4
访问完节点6,遍历完成
所以答案为[1,3,4,6]
AC代码:
class Solution {
int d=0;
List<Integer> a= new ArrayList<>();
void bfs(TreeNode t,int n){
if(t!=null){
if(n>d){
a.add(t.val);
}
if(t.left==null && t.right==null){
if(n>d){
d=n;
return;
}
}
bfs(t.right,n+1);
bfs(t.left,n+1);
}
}
public List<Integer> rightSideView(TreeNode root) {
bfs(root,1);
return a;
}
}