1.递归思想
思路:
1.对根结点的左子树进行后序遍历;
2.对根结点的右子树进行后序遍历;
3.对根结点进行访问。
代码:
参考:递归遍历二叉树
const TreeNode = {
val: 1,
left: {
val: 2,
left: {
val: 4,
},
right: {
val: 5
}
},
right: {
val: 3,
left: {
val: 6,
},
right: {
val: 7
}
}
};
var lastOrderRecur = function(root) {
var list = [];
var lastOrder = function(root) {
if (root == undefined) {
return;
} else {
lastOrder(root.left);
lastOrder(root.right);
list.push(root.val);
}
}
lastOrder(root);
return list;
}
console.log( lastOrderRecur(TreeNode));
2. 迭代
const treeNode = {
val: 1,
left: {
val: 2,
left: {
val: 4,
},
right: {
val: 5
}
},
right: {
val: 3,
left: {
val: 6,
},
right: {
val: 7
}
}
};
var preOrder = function(root) {
var list = [];
const remStack = [];
var lastNode = new TreeNode(null);
remStack.push(root);
while (remStack.length != 0) {
while (remStack[remStack.length - 1].left != null) { // 思考一下这里为什么要这么写
remStack.push(remStack[remStack.length - 1].left);
}
while (remStack.length != 0) {
if (remStack[remStack.length - 1].right == lastNode || remStack[remStack.length - 1].right == null) {
lastNode = remStack[remStack.length - 1];
list.push(remStack.pop().val);
} else if (remStack[remStack.length - 1].right != null) {
remStack.push(remStack[remStack.length - 1].right);
break;
}
}
}
return list;
}
function TreeNode(val) {
this.val = val;
this.left = this.right = null;
}
console.log(preOrder(treeNode));