# **Leetcode筆記(Binary Tree Right Side View)** :::info :information_source: 題目 : Binary Tree Right Side View, 類型 : binary tree , 等級 : medium 日期 : 2023/05/23,2023/07/05,2023/09/13,2024/09/04 ::: ### 嘗試 2023/07/05 每次都用tmp去紀錄最尾端的是誰 記得要用popleft ```python class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: if not root: return None res = [] q = deque([root]) while q: for _ in range(len(q)): node = q.popleft() if node.left: q.append(node.left) if node.right: q.append(node.right) tmp = node.val res.append(tmp) return res ``` 2023/09/13 ```python class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: if not root: return None res = [] q = deque([root]) while q: length = len(q) for _ in range(length): node = q.popleft() if node.left: q.append(node.left) if node.right: q.append(node.right) lastnode = node res.append(lastnode.val) return res ``` 2024/09/04 ```python class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: if not root: return None res = [] q = deque() q.append(root) while q: length = len(q) for _ in range(length): node = q.popleft() if node.left: q.append(node.left) if node.right: q.append(node.right) temp = node.val res.append(temp) return res ``` --- ### **優化** 時間複雜度是 O(n),在最壞的情況下,我們需要遍歷每個節點一次,並將其放入佇列中。 空間複雜度也是 O(n),其中 n 是二叉樹中的節點數量。在佇列的過程中,最壞的情況下,佇列中可能存儲著二叉樹的所有節點,佔用 O(n) 的額外空間。 ```python # bfs queue class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: if not root: return None q = deque([root]) res = [] while q: # 每次都把最右的拿出來 res.append(q[-1].val) for _ in range(len(q)): # 但也不會失去append整個樹的機會 node = q.popleft() if node.left: q.append(node.left) if node.right: q.append(node.right) return res ``` ```python # bfs 遞迴 class Solution: def rightSideView(self, root: Optional[TreeNode]) -> List[int]: # len([[1]])為1 / len([[1], [2]])為2 # [].append([])結果為[[]] 長度為1 res = [] def bfs(node, level, res): if not node: return # 創造空儲存集 if len(res) == level: res.append([]) res[level].append(node.val) bfs(node.left, level + 1, res) bfs(node.right, level + 1, res) bfs(root, 0, res) return [res[l][-1] for l in range(len(res))] ``` --- **:warning: 錯誤語法** :::warning ::: **:thumbsup:學習** :::success ::: **思路** **講解連結** https://blog.csdn.net/fuxuemingzhu/article/details/79557632 Provided by. 负雪明烛 ###### tags: `binary tree` `medium` `leetcode`