1. 程式人生 > >領釦(LeetCode)二叉樹的右檢視 個人題解

領釦(LeetCode)二叉樹的右檢視 個人題解

給定一棵二叉樹,想象自己站在它的右側,按照從頂部到底部的順序,返回從右側所能看到的節點值。

示例:

輸入: [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 }