二叉树三种遍历方式在同一种递归思想的实现JavaScript

三种遍历方式在同一种递归思想的实现

​ 每次迭代其实中间会有一个暂存stack(维护先进先出的原则),暂时保存每次向左或者向右的遍历结果,等到全遍历完,再把结果push,按照结果

img

先序遍历(PreOrder, 按照先访问根节点的顺序)
var preorderTraversal = function(root) {
  const res = []
  function traversal (root) {
    if (root !== null) {
    // 实际访问顺序,一直先遍历左子树,但是先把根节点的值push进去了,之后再把左节点的值push进去
    // 这个顺序就是按照start 的流线走的
      res.push(root.val) // 访问根节点的值
      traversal(root.left) // 递归遍历左子树
      traversal(root.right) // 递归遍历右子树
    }
  }
  traversal(root)
  return res
}
中序遍历(InOrder, 按照根节点在中间访问的顺序)
var inorderTraversal = function(root) {
  const res = []
  function traversal (root) {
    if (root !== null) {
// 实际访问顺序,一直先遍历左子树,但是这里中序遍历是先把左子树的值push进去了,之后再把根节点的值push进去 // 这个顺序就是按照start 的流线走的
      traversal(root.left)  // 递归遍历左子树
      res.push(root.val)	// 访问根节点的值
      traversal(root.right)	// 递归遍历右子树
    }
  }
  traversal(root)
  return res
}
后序遍历(PosterOrder, 按照根节点在后面访问的顺序)
var postorderTraversal = function(root) {
  const res = []
  function traversal (root) {
    if (root !== null) {
      traversal(root.left)		// 递归遍历左子树
      traversal(root.right)     // 递归遍历右子树
      res.push(root.val)        // 访问根节点的值
    }
  }
  traversal(root)
  return res
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值