后序遍历较为详细,配有图解,想看图解的,转到后序遍历,画图太麻烦了。。。 所以只画了后序的,欢迎评论区交流。
初始化树结构
var nodes = {
node: 6,
left: {
node: 5,
left: {
node: 4
},
right: {
node: 3
}
},
right: {
node: 2,
right: {
node: 1
}
}
}
前序(深度遍历)
顺序: 根 左 右
递归边界: 从根部开始,将根节点值压栈,如果根节点存在左子树,那么以左节点为根节点进行前序遍历,存在右节点,则以右节点为根节点进行前序递归遍历
递归遍历
var DLR = function(root) {
if (!root) return [];
let res = [];
res.push(root.node); //6 5 4
if (root.left) res = res.concat(DLR(root.left))
if (root.right) res = res.concat(DLR(root.right))
return res;
}
console.log(DLR(nodes));// [ 6, 5, 4, 3, 2, 1 ]
非递归
var DLR = function(root) {
if(!root) return [];
let stack = [root];
let res = [];
while (stack.length)