返回

实践深度层次遍历刷题(下)

见解分享

正文

在上一篇文章中,我介绍了层次遍历和深度遍历这两种树的基本遍历方法。现在,让我们通过刷题的形式来进一步巩固对这两种方法的理解和应用。

层次遍历刷题

  1. 给定一棵二叉树,求它的层序遍历结果
    将树的每个节点从左到右放入队列,然后依次将队列中的节点出队并放入结果数组中。
    [代码示例]
def level_order(root):
    if not root:
        return []
    queue = [root]
    result = []
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.pop(0)
            level.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        result.append(level)
    return result
  1. 给定一棵二叉树,求它的逆序层序遍历结果
    将树的每个节点从右到左放入队列,然后依次将队列中的节点出队并放入结果数组中。
    [代码示例]
def reverse_level_order(root):
    if not root:
        return []
    queue = [root]
    result = []
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.pop(0)
            level.append(node.val)
            if node.right:
                queue.append(node.right)
            if node.left:
                queue.append(node.left)
        result.append(level)
    result.reverse()
    return result
  1. 给定一棵二叉树,求它的锯齿形层序遍历结果
    将树的每个节点从左到右放入队列,然后依次将队列中的节点出队并放入结果数组中。
    当队列中还有节点时,将队列中的节点从右到左放入队列。
    重复上述两步,直到队列为空。
    [代码示例]
def zigzag_level_order(root):
    if not root:
        return []
    queue = [root]
    result = []
    left_to_right = True
    while queue:
        level = []
        for _ in range(len(queue)):
            if left_to_right:
                node = queue.pop(0)
            else:
                node = queue.pop()
            level.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        result.append(level)
        left_to_right = not left_to_right
    return result

深度遍历刷题

  1. 给定一棵二叉树,求它的前序遍历结果
    从根节点开始,先访问根节点,然后递归访问左子树,最后递归访问右子树。
    [代码示例]
def preorder(root):
    if not root:
        return []
    result = [root.val]
    result.extend(preorder(root.left))
    result.extend(preorder(root.right))
    return result
  1. 给定一棵二叉树,求它的中序遍历结果
    从根节点开始,先递归访问左子树,然后访问根节点,最后递归访问右子树。
    [代码示例]
def inorder(root):
    if not root:
        return []
    result = []
    result.extend(inorder(root.left))
    result.append(root.val)
    result.extend(inorder(root.right))
    return result
  1. 给定一棵二叉树,求它的后序遍历结果
    从根节点开始,先递归访问左子树,然后递归访问右子树,最后访问根节点。
    [代码示例]
def postorder(root):
    if not root:
        return []
    result = []
    result.extend(postorder(root.left))
    result.extend(postorder(root.right))
    result.append(root.val)
    return result

更多学习资料

总结

层次遍历和深度遍历是树的基本遍历方法,在算法和数据结构中都有广泛的应用。通过刷题的形式,我们可以进一步巩固对这两种方法的理解和应用。希望本文能对大家有所帮助。