返回

深入理解 LeetCode 二叉树结构和遍历之秘

前端

在计算机科学领域,二叉树 作为一种重要的数据结构,广泛应用于搜索、排序、哈希表等算法中。理解其结构和遍历方式是算法学习的基础。LeetCode 上提供大量二叉树相关的题目,是检验算法能力的绝佳平台。

二叉树结构

二叉树是一种分层树结构,其每个节点最多有两个子节点,称为左子节点右子节点 。最上层的节点称为根节点 。二叉树的结构可以用以下术语

  • 度: 每个节点拥有的子节点数量。对于二叉树,度最大为 2。
  • 深度: 从根节点到该节点的最长路径长度。
  • 高度: 树中深度最大的节点的深度。
  • 叶子节点: 度为 0 的节点。

遍历方式

二叉树的遍历是指系统地访问其所有节点。主要有四种遍历方式:

  • 前序遍历: 根节点 -> 左子树 -> 右子树
  • 中序遍历: 左子树 -> 根节点 -> 右子树
  • 后序遍历: 左子树 -> 右子树 -> 根节点
  • 深度优先遍历(DFS): 沿着一条路径深度遍历,直到叶子节点,再回溯到上一层,继续遍历。
  • 广度优先遍历(BFS): 逐层遍历,先遍历同一层的节点,再遍历下一层的节点。

递归和栈

DFS 和 BFS 的实现通常采用递归或栈。递归 是函数自身调用自身。 是一种数据结构,后进先出(LIFO),类似于一叠盘子。

  • DFS(递归): 将当前节点压入栈,然后遍历其左子树和右子树。
  • DFS(栈): 将根节点压入栈,循环弹出栈顶元素,遍历其左子树和右子树,并将未遍历的子树压入栈。
  • BFS(队列): 将根节点压入队列,循环弹出队列首元素,遍历其左右子树,并将未遍历的子树压入队列。

实例代码

以下是用 Python 实现的前序遍历:

def preorder_traversal(root):
    if not root:
        return []

    stack = [root]
    result = []

    while stack:
        node = stack.pop()
        result.append(node.val)

        if node.right:
            stack.append(node.right)
        if node.left:
            stack.append(node.left)

    return result

总结

掌握二叉树结构和遍历技巧对于算法学习至关重要。LeetCode 提供了丰富的二叉树题目,帮助巩固概念和提升算法能力。通过理解不同遍历方式的差异以及递归和栈的应用,我们可以高效解决各种二叉树问题。