深度优先

也就是 深度优先算法 dfs Depth First Search

参考资料

JS 前序遍历、中序遍历、后序遍历、层序遍历详解,深度优先与广度优先区别,附 leetcode 例题题解答案

前序遍历

前序遍历:先访问根,再访问左节点,然后访问左节点的左节点,递归下去,然后才访问右节点

144. 二叉树的前序遍历(简单)

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var preorderTraversal = function (root) {
  const res = [];
  function traversal(root) {
    if (root !== null) {
      res.push(root.val);
      root.left && traversal(root.left);
      root.right && traversal(root.right);
    }
  }

  traversal(root);
  return res;
};

中序遍历

中序遍历:当跑到到根节点 B 时,先得看看有没有左子树,正好有,所以先遍历了左子树 A 之后才是 B,最后遍历右子树 C,所以完整顺序顺序为 ABC

94. 二叉树的中序遍历(简单)

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var inorderTraversal = function (root) {
  const res = [];
  function traversal(root) {
    if (root !== null) {
      root.left && traversal(root.left);
      res.push(root.val);
      root.right && traversal(root.right);
    }
  }
  traversal(root);
  return res;
};

后序遍历

后序遍历:从根节点 C 出发,先访问左子树 A,紧接着右子树 B,最后根节点 C,所以顺序为 ABC

145. 二叉树的后序遍历(简单)

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number[]}
 */
var postorderTraversal = function (root) {
  const res = [];
  function traversal(root) {
    if (root !== null) {
      root.left && traversal(root.left);
      root.right && traversal(root.right);
      res.push(root.val);
    }
  }
  traversal(root);

  return res;
};