给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
示例:
输入: [1,2,3,null,5,null,4] 输出: [1, 3, 4] 解释: 1 <--- / 2 3 <--- \ 5 4 <---
拿到这题,一开始的思路是强行遍历右节点,后来发现如果右节点的深度低于左节点时,左节点也是输于右视图的一部分,答案错误。然后参考了相关做法,发现正确的做法应该是层次遍历,判断出每一层的所有内容,然后取最右边的值加入答案。直到最后一个层次遍历完毕。
由于百度到的答案都是使用C++实现的,他们先入左节点再入右节点,C++的队列定义可以取队首或者队尾的内容,这样可以方便取出最右节点。但是JAVA中只能取队首的内容。于是我将右节点先入队,直接取队首,就是答案。
并且,需要注意层次的关系,不要混乱了层次。
代码如下:
1 class Solution { 2 List<Integer> ans=new LinkedList<>(); 3 4 public List<Integer> rightSideView(TreeNode root) { 5 Queue<TreeNode> queue=new LinkedList<>(); 6 if(root==null) 7 return ans; 8 queue.add(root); 9 while(!queue.isEmpty()) 10 { 11 Queue<TreeNode> quetmp=new LinkedList<>(); 12 ans.add(queue.peek().val); 13 while(!queue.isEmpty()) 14 { 15 TreeNode nodetmp=queue.poll(); 16 if(nodetmp.right!=null) 17 quetmp.add(nodetmp.right); 18 if(nodetmp.left!=null) 19 quetmp.add(nodetmp.left); 20 } 21 queue=quetmp; 22 } 23 return ans; 24 } 25 26 }
原文地址:https://www.cnblogs.com/axiangcoding/p/9965887.html
时间: 2024-10-21 11:07:32