代码语言:javascript复制
// 前序遍历:根左右
// 中序遍历:左根右
// 后序遍历:左右根
var preorderTraversal = function (root) {
if (!root) {
return null;
}
// 迭代
let res = [];
let stack = [root];
while (stack.length > 0) {
const node = stack.pop();
res.push(node.val);
// stack 是一个栈,用来存放节点,遍历的时候每次从最后面取出一个节点获取 val,先进后出,所以要先 push 右节点,
node.right && stack.push(node.right);
node.left && stack.push(node.left);
}
return res;
// 递归
// let res = [];
// const preorder = (node, res) => {
// if (node) {
// res.push(node.val);
// 前序遍历先左后右,所以先递归左节点
// preorder(node.left, res);
// preorder(node.right, res);
// }
// };
// preorder(root, res);
// return res;
};
递归要比迭代更耗时一些。