前序遍历
var preorderTraversal = function(root) {
let res = [];
let stack = [];
while(root||stack.length){
while(root){
stack.push(root);
res.push(root.val);
root = root.left;
}
root = stack.pop();
root = root.right;
}
return res;
};
中序遍历
let res = [];
let stack = [];
while(root||stack.length){
while(root){
stack.push(root);
root = root.left;
}
root = stack.pop();
res.push(root.val);
root = root.right;
}
return res;
};
前序遍历和中序遍历不同点是插入节点的位置,前序是在遍历一个左节点后就插入,中序是在遍历完当前路径的所有左节点后插入。 后序遍历
var postorderTraversal = function(root) {
let res = [];
let stack = [];
while(root||stack.length){
while(root){
stack.push(root);
res.unshift(root.val);
root = root.right;
}
root = stack.pop();
root = root.left;
}
return res;
};
后序遍历的区别是先入栈右节点,插入方式是反插,这样就能保证先左后右再插入的顺序了。