二叉树的前中后序遍历

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的前中后序遍历相关的知识,希望对你有一定的参考价值。

1

const bt = 
  val: 1,
  left: 
      val: 2,
      left: 
          val: 4,
          left: null,
          right: null,
      ,
      right: 
          val: 5,
          left: null,
          right: null,
      ,
  ,
  right: 
      val: 3,
      left: 
          val: 6,
          left: null,
          right: null,
      ,
      right: 
          val: 7,
          left: null,
          right: null,
      ,
  ,


// 1、递归
/*
  前序遍历

  访问根节点
  对根节点的左子树进行先序遍历
  对根节点的右子树进行先序遍历
*/
function preOrder (root) 
  if(!root) return

  console.log(root.val)
  preOrder(root.left)
  preOrder(root.right)


/*
  中序遍历
  
  对根节点的左子树进行中序遍历
  访问根节点
  对根节点的右子树进行中序遍历
*/
function inOrder (root) 
  if(!root) return
  
  inOrder(root.left)
  console.log(root.val)
  inOrder(root.right)


/*
  后序遍历
  
  对根节点的左子树进行后序遍历
  对根节点的右子树进行后序遍历
  访问根节点
*/
function postOrder (root) 
  if(!root) return
  
  postOrder(root.left)
  postOrder(root.right)
  console.log(root.val)



// 2、迭代
/*
  前序遍历
*/
function preOrder (root) 
  if(!root) return

  const stack = [root]

  while(stack.length) 
    const n = stack.pop()
    console.log(n.val)

    if(n.right) stack.push(n.right)
    if(n.left) stack.push(n.left)
  


/*
  中序遍历
*/
function inOrder (root) 
  if(!root) return

  const stack = []
  let p = root

  while(stack.length || p) 
    while(p) 
      stack.push(p)
      p = p.left
    
  
    const n = stack.pop()
    console.log(n.val)
    p = n.right
  


/*
  后序遍历
*/
function postOrder (root) 
  if(!root) return
  
  const stack = [root]
  const outputStack = []

  while(stack.length) 
    const n = stack.pop()
    outputStack.push(n)
    
    if(n.left) stack.push(n.left)
    if(n.right) stack.push(n.right)
  

  while(outputStack.length) 
    const n = outputStack.pop()
    console.log(n.val)
  

1

以上是关于二叉树的前中后序遍历的主要内容,如果未能解决你的问题,请参考以下文章

二叉树的前中后层序遍历

非递归实现二叉树的前中后序遍历

二叉树的前中后序遍历的非递归解法

二叉树的前中后序遍历的非递归解法

二叉树的前中后序非递归法

二叉树的前中后序非递归法