在 JavaScript 中,你可以使用递归或迭代的方式来实现二叉树的前序、中序和后序遍历。下面是使用递归方式实现的示例代码:
递归遍历
1 | // 定义二叉树节点 |
迭代遍历
1 | function TreeNode(val, left, right) { |
二叉树深度
1 | // [队列 ]使用一个队列 queue 来进行广度优先搜索。首先将根节点放入队列中,然后不断迭代直到队列为空。在每一轮迭代中,我们先记录当前队列的大小 size,然后依次取出队列中的节点,并将它们的左右子节点(如果存在)加入队列。这样,每一轮迭代都表示一层的节点被访问过。最后,返回迭代的次数,即为二叉树的最大深度。 |
图遍历算法
BFS(广度优先搜索)和DFS(深度优先搜索)是两种常用的图遍历算法,它们也可以用于遍历二叉树。下面分别介绍它们在二叉树中的实现方式:
BFS(广度优先搜索)
BFS使用队列来实现,按照层级顺序逐层遍历二叉树。具体步骤如下:
- 创建一个队列,并将根节点入队。
- 当队列不为空时,执行以下步骤:
- 出队一个节点,并访问该节点。
- 将该节点的左子节点和右子节点(如果存在)依次入队。
- 重复步骤2直到队列为空。
DFS(深度优先搜索)
DFS有两种常见的实现方式:递归和迭代。
递归实现DFS:
递归实现DFS是最直观的方式,它可以通过递归函数来实现。具体步骤如下:
- 定义一个递归函数,传入当前节点作为参数。
- 如果当前节点为空,返回。
- 访问当前节点。
- 递归调用函数遍历当前节点的左子节点。
- 递归调用函数遍历当前节点的右子节点。
迭代实现DFS:
迭代实现DFS可以使用栈来辅助实现。具体步骤如下:
- 创建一个栈,并将根节点入栈。
- 当栈不为空时,执行以下步骤:
- 出栈一个节点,并访问该节点。
- 将该节点的右子节点(如果存在)入栈。
- 将该节点的左子节点(如果存在)入栈。
重复步骤2直到栈为空。
无论是BFS还是DFS,它们都可以用于遍历二叉树,并根据需要执行相应的操作。选择使用哪种方式取决于具体的需求和问题。