二叉树遍历

72 阅读1分钟

数据

const tree = {
  value: 0,
  left: {
    value: 1,
    left: {
      value: 3,
      left: {
        value: 6,
      },
      right: {
        value: 7,
      },
    },
    right: {
      value: 4,
      left: {
        value: 8,
        left: {
          value: 11,
        },
        right: {
          value: 12,
        },
      },
    },
  },
  right: {
    value: 2,
    left: {
      value: 5,
      left: {
        value: 9,
      },
      right: {
        value: 10,
        right: {
          value: 13,
        },
      },
    },
  },
};

前序遍历

function frontMap(tree) {
  if (tree == null) return;
  console.log(tree.value);
  frontMap(tree.left);
  frontMap(tree.right);
}

中序遍历

function centerMap(tree) {
  if (tree == null) return;
  centerMap(tree.left);
  console.log(tree.value);
  centerMap(tree.right);
}

后序遍历

function backMap(tree) {
  if (tree == null) return;
  backMap(tree.left);
  backMap(tree.right);
  console.log(tree.value);
}

层序遍历

bfs广度优先

const levelOrderBottom = function (root) {
  if (!root) return [];
  let res = [],
    queue = [root];
  while (queue.length) {
    let curr = [],
      temp = [];
    while (queue.length) {
      let node = queue.shift();
      // let node = queue.splice(0,1)[0]
      curr.push(node.val);
      if (node.left) temp.push(node.left);
      if (node.right) temp.push(node.right);
    }
    res.push(curr);
    queue = temp;
  }
  return res.reverse();
};

dfs深度优先

const levelOrderBottom = function (root) {
  const res = [];
  var dep = function (node, depth) {
    if (!node) return;
    res[depth] = res[depth] || [];
    res[depth].push(node.val);
    dep(node.left, depth + 1);
    dep(node.right, depth + 1);
  };
  dep(root, 0);
  return res.reverse();
};

参考:mp.weixin.qq.com/s/gfvV_MFbH…