title | date | permalink | tags | |||
---|---|---|---|---|---|---|
Binary Tree Path Sum |
2021-09-24 |
/posts/2021/09/path-sum/ |
|
给定一个节点数为 n
return
[
[5,4,11,2],
[5,8,9]
]
Space complexity: O(n)
Time complexity: O(n)
题目
Here's the definition of BFS (ch 22.2 Introduction to Algorithms):
Given a graph G = (V,E) and a distinguished source vertex s, breadth-first search systematically explores the edges of G to 'discover' every vertex that is reachable from s.
“找到
BFS
Here is how bfs process
BFS逻辑
given: G = (V,E) with adjacency lists of weights
scanning adjacency lists: O(E)
queue operation: O(V)
BFS: O(V+E)
DFS逻辑
DFS 找到
最近 经历的 vertex v, 找到与 v 连接的 所有 edges。一直找直到我们找到了所有能从原点出发 reach到 的 vertices。
如果
有 一些没有找到的vertices, dfs 继续选择另一个vertex当 作 source, 继续重 复dfs
DFS 一直重复到它发现了所有的 vertex
DFS
Here is how dfs process
DFS逻辑:
Enqueuing / Dequeuing : O(1)
Queue operation : O(V)
Scanning adjacency lists: O(E)
DFS: O(V+E)
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# @param root TreeNode类
# @param sum int整 型
# @return int整 型 二 维数组
#
class Solution:
def pathSum(self , root , sum ):
# write code here
temp,res=[],[]
def dfs(root,sum,cnt):
if not root: return #如果节点为空结束当 前 递归
temp.append(root.val) #将 当 前 节点加入 temp数 组
cnt += root.val #把 当 前 节点加入 到 路 径 和 中
if root.left == None and root.right == None: #当 递归到没 有子 树的时候就需要 判断
if cnt == sum:res.append(temp[:]) #如果当 前 节点的 路 径 和 等 于sum,那 么就在 res中 插入 tmp
else:
dfs(root.left,sum,cnt) #递归左 子 树
dfs(root.right,sum,cnt) #递归右子 树
cnt -= temp[len(temp) - 1]
temp.pop()
dfs(root,sum,0)
return res
❗️ PS. function inside function in python, inside funtion can use the variable outside