二叉树的前序遍历

376 阅读1分钟

JS前序遍历二叉树

首先了解一下二叉树的前序遍历顺序:

根结点 ---> 左子树 ---> 右子树

如图所示的二叉树,序号表明了遍历顺序。

image.png

二叉树前序遍历按照 根->左->右 的顺序遍历,如上图:

  • root 节点是 1, 1下面有 2 和 6,优先遍历2,6在2子节点全部处理完后进行处理
  • 2 节点下面有 3 和 5, 优先遍历 3, 5在3节点全部处理完后进行处理
  • 3节点下仅有4,处理4
  • 回溯到2,3已经完全处理完,处理节点5
  • 回溯到1,2已经完全处理完,处理节点6 以此类推

类似有着严格顺序的执行,首先想到的是用栈的方式去处理。

思路:

  • 将节点1,推入栈中
  • 遍历栈元素
  • pop出一个元素,进入排序结果中。同时将他的右节点和左节点推入栈中(根据先进后出的原则,先push右节点)

ScreenRecorderProject15.gif

代码实现:

  let NodeTree = function (ele) {
    this.val = ele;
    this.left = null;
    this.right = null;
  }

  this.createTree = function () {
    let tree = new NodeTree('A');
    tree.left = new NodeTree('B');
    tree.right = new NodeTree('C');
    tree.left.left = new NodeTree('D');
    tree.left.left.left = new NodeTree('G');
    tree.left.left.right = new NodeTree('H');
    tree.right.left = new NodeTree('E');
    tree.right.right = new NodeTree('F');
    tree.right.left.right = new NodeTree('I');
    return tree;
  }
}
let treeCode = new TreeCode();
let root = treeCode.createTree()

let stack = []
let res = []
stack.push(root)
while (stack.length) {
  const node = stack.pop()
  res.push(node.val)
  node.right ? stack.push(node.right) : ''
  node.left ? stack.push(node.left) : ''
}
console.log(res)

image.png

打印结果: [ 'A', 'B', 'D', 'G', 'H', 'C', 'E', 'I', 'F' ]