今天我們來加深對樹的遞迴思想的理解。
題目連結: 199. Binary Tree Right Side View
題目描述:給定一棵二元樹的根節點 root,想像你自己站在它的右側,按照從頂部到底部的順序,返回你能看到的節點的值。
Input: root = [1,2,3,null,5,null,4]
Output: [1,3,4]
Input: root = [1,2,3,4,null,null,null,5]
Output: [1,3,4,5]
解題思路:
這道題可以使用BFS、DFS來實現,BFS方法是使用queue方式,DFS則是使用遞歸的方式做處理。
我自己是使用(根 -> 右 -> 左)順序的DFS演算法來解這道題(個人覺得相對容易)。
因為是要判斷最右邊的值,只要先計算當前深度與答案長度是否相等,就可以把答案加入陣列中。
class Solution:
def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
ans =[]
def dfs(node,depth):
if node == None:
return
if depth == len(ans):
ans.append(node.val)
dfs(node.right,depth+1)
dfs(node.left,depth+1)
dfs(root,0)
return ans
演算法分析:
dfs(node.right,depth+1)
dfs(node.left,depth+1)
,這部分是優先遍歷右子樹,確保了在任何一個depth,我們的演算法總是優先訪問最右邊的節點。if depth == len(ans):
直觀意思是「我們是不是第一次到達 depth 這個深度?」複雜度分析:
O(n)
(我們需要遍歷樹中的每一個節點一次,n 是樹的總節點數)。O(n)
。
O(log n)
。O(n)
。有問題可以底下留言!
下回見!!