二叉树的右视图>>>
BFS
:采用层序遍历,输出每层最后一个遍历的元素,即为右视图
public List<Integer> rightSideView(TreeNode root) {
List<Integer> rs = new ArrayList<>();
if(root==null)return rs;
Queue<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
while(!queue.isEmpty()){
int size = queue.size();
for(int i=0;i<size;i++){
TreeNode temp = queue.poll();
if(temp.left!=null){
queue.add(temp.left);
}
if(temp.right!=null){
queue.add(temp.right);
}
if(i==size-1){
rs.add(temp.val);
}
}
}
return rs;
}
DFS
:深度递归优先遍历,采取 根 右左的遍历顺序,如果发现当前list中没有加入值,则将当前遍历到的值加入到list中,否则说明已经加入了,跳过即可
public List<Integer> rightSideView1(TreeNode root){
List<Integer> rs = new ArrayList<>();
if(root==null) return rs;
dfs(root,rs,0);
return rs;
}
public void dfs(TreeNode root,List<Integer> rs,int depth){
if(root==null) return;
if(rs.size()==depth){
rs.add(root.val);
}
depth++;
dfs(root.right,rs,depth);
dfs(root.left,rs,depth);
}