const recursion = (level, params) =>{
// recursion terminator
if(level > MAX_LEVEL){
process_result
return
}
// process current level
process(level, params)
//drill down
recursion(level+1, params)
//clean current level status if needed
}
DFS 代码模板
递归写法
visited = set()
def dfs(node, visited):
if node in visited: # terminator
# already visited
return
visited.add(node)
# process current node here.
...
for next_node in node.children():
if next_node not in visited:
dfs(next_node, visited)
非递归写法
def DFS(self, root):
if tree.root is None:
return []
visited, stack = [], [root]
while stack:
node = stack.pop()
visited.add(node)
process (node)
# 生成相关的节点
nodes = generate_related_nodes(node)
stack.push(nodes)
# other processing work
...
BFS代码模板
const bfs = (root) => { let result = [], queue = [root] while (queue.length > 0) { let level = [], n = queue.length for (let i = 0; i < n; i++) { let node = queue.pop() level.push(node.val) if (node.left) queue.unshift(node.left) if (node.right) queue.unshift(node.right) } result.push(level) } return result};