JS前序遍历二叉树
首先了解一下二叉树的前序遍历顺序:
根结点 ---> 左子树 ---> 右子树
如图所示的二叉树,序号表明了遍历顺序。
二叉树前序遍历按照 根->左->右 的顺序遍历,如上图:
- 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右节点)
代码实现:
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)
打印结果:
[ 'A', 'B', 'D', 'G', 'H', 'C', 'E', 'I', 'F' ]