前序(Pre-order)

  • 根-左-右
    def preorder(self,root):
      if root:
          self.traverse_path.append(root.val)
          self.preorder(root.left)
          self.preorder(root.right)

中序(In-order)

  • 左-根-右
    def inorder(self,root):
      if root:
          self.inorder(root.left)
          self.traverse_path.append(root.val)
          self.inorder(root.right)

后序(Post-order)

  • 左-右-根
    def postorder(self,root):
      if root:
          self.postorder(root.left)
          self.postorder(root.right)
          self.traverse_path.append(root.val)

深度优先(DFS)

visited = set()
def dfs(node,visited):
    if node in visited:
        return
    visited.add(node)
    # 便利
    for next_node in node.Children():
        if not next_node in visited:
            dfs(next_node,visited)     

广度优先(BFS)

def bfs(graph,start,end):
    queue = []
    queue.append([start])
    visited.add(start)

    while queue:
        node = queue.pop()
        visited.add(node)

        process(node)
        nodes = generate_related_nodes(node)
        queue.push(nodes)