1、DFS\BFS遍历树
def dfs(root):
if (root is None):
return
dfs(root.left)
dfs(root.right)
def bfs(root):#相当于层序遍历
queue=[]
queue.append(root);
while (queue):
node = queue.pop(0)#弹出一个节点,然后挨个添加它的左右子树
#pop()默认-1
if (node.left is not None):
queue.append(node.left)
if (node.right is not None):
queue.append(node.right)
#总结
while queue 不空:
cur = queue.pop()
if cur 有效且未被访问过:
进行处理
for 节点 in cur 的所有相邻节点:
if 该节点有效:
queue.push(该节点)
2、动态规划
#二维矩阵赋初始值
rows, columns = len(grid), len(grid[0])#行 列
dp = [[0 for _ in range(columns)] for _ in range(rows)]
3、回溯(DFS)
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
4、二分查找
left=0
right=len(nums)-1
while left<right:
mid = left + (right - left) // 2#用/2会出现小数
if nums[mid]<target:
操作1
elif nums[mid]==target:#mid是一个目标,mid前可能还有
操作2
else:
#nums[mid]>target
操作3
right = mid
和left = mid + 1
和mid = left + (right - left) / 2
;一定是配对出现的;right = mid - 1
和left = mid
和mid = left + (right - left + 1) /2
; 一定是配对出现的。