给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [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 <---
初始depth=0,按照根->右->左的顺序遍历
1,3,4层均大于0,添加到list里
节点4为叶子节点,层号3>depth,所以depth=3
继续遍历,节点2,5层号均小于depth,不添加
所以答案为[1,3,4]
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;
}
}