JavaScript二叉树(先序、中序、后序遍历)

以如下二叉树为例

{1,2,3,4,5,6,7,8,9,10,#,#,11,#,#,#,#,12,#,#,13}

先序遍历

遍历的顺序:NLR(根节点->左结点->右结点)

/**
 * @param root TreeNode类
 * @return 一维数组
 */
function preorderTraversal(root) {
  const res = []
  preorder(root, res)
  return res
}
function preorder(root, res) {
  if (root == null) {
    return
  }
  // 先序遍历的位置
  res.push(root.val)
  preorder(root.left, res)
  preorder(root.right, res)
}

输出结果:[1,2,4,8,9,12,5,10,13,3,6,11,7]

中序遍历

遍历的顺序:LNR(左节点->根结点->右结点)

/**
 * @param root TreeNode类
 * @return 一维数组
 */
function inorderTraversal(root) {
  const res = []
  inOrder(root, res)
  return res
}
function inOrder(root, res) {
  if (root == null) {
    return
  }
  inOrder(root.left, res)
  // 中序遍历的位置
  res.push(root.val)
  inOrder(root.right, res)
}

输出结果:[8,4,12,9,2,10,13,5,1,6,11,3,7]

后序遍历

遍历的顺序:LRN(左结点->右结点->根节点)

/**
 * @param root TreeNode类
 * @return 一维数组
 */
function postorderTraversal( root ) {
  let res = [];
  postOrder(root, res);
  return res;
}
function postOrder(root, res){
  if(root == null)  return;
  postOrder(root.left);
  postOrder(root.right);
  // 后序遍历的位置
  res.push(root.val);
}

输出结果:[8,12,9,4,13,10,5,2,11,6,7,3,1]

经验分享 程序员 微信小程序 职场和发展