【数据结构】二叉树几种遍历【前序遍历,中序遍历,后序遍历,层次遍历】

336 阅读1分钟

整体介绍

几种遍历方式

  • 前序遍历:根结点 ---> 左子树 ---> 右子树
  • 中序遍历:左子树---> 根结点 ---> 右子树
  • 后序遍历:左子树 ---> 右子树 ---> 根结点
  • 层次遍历(BFS):只需按层次遍历即可

举例

二叉树数据格式

{ "val": 5, "left": { "val": 3, "left": { "val": 2, "left": { "val": 1, "left": null, "right": null }, "right": null }, "right": { "val": 4, "left": null, "right": null } }, "right": { "val": 8, "left": { "val": 6, "left": null, "right": null }, "right": { "val": 9, "left": null, "right": null } } }

二叉树展示

二叉树

  • 前序遍历: 5, 3, 2, 1, 4, 8, 6, 9
  • 中序遍历: 1, 2, 3, 4, 5, 6, 8, 9
  • 后序遍历: 1, 2, 4, 3, 6, 9, 8, 5
  • 层次遍历(BFS): 5, 3, 8, 2, 4, 6, 9, 1

几种遍历具体实现

前序遍历

**遍历顺序: ** 根结点 ---> 左子树 ---> 右子树

function preTraverse(root) {
  if (root) {
    console.log(root.val);
    preTraverse(root.left);
    preTraverse(root.right);
  }
}

中序遍历

**遍历顺序: ** 左子树---> 根结点 ---> 右子树

function midTraverse(root) {
  if (root) {
    midTraverse(root.left);
    console.log(root.val);
    midTraverse(root.right);
  }
}

后序遍历

**遍历顺序: ** 左子树 ---> 右子树 ---> 根结点

function endTraverse(root) {
  if (root) {
    endTraverse(root.left);
    endTraverse(root.right);
    console.log(root.val);
  }
}

层次遍历(BFS)

**遍历顺序: ** 自顶而下,层级遍历

function BFS(root) {
  if(!root) return []
  const res = [];
  const queue = [root];
  while (queue.length) {
    const len = queue.length;
    for (let i = 0; i < len; i++) {
      const node = queue.shift();
      res.push(node.val)
      if (node.left) queue.push(node.left);
      if (node.right) queue.push(node.right);
    }
  }
  return res
}