「每日LeetCode」2020年10月27日

本文最后更新于:2023年3月19日 晚上

Lt144. 二叉树的前序遍历、递归

144. 二叉树的前序遍历

给定一个二叉树,返回它的 前序  *遍历。
*
示例:**

1
2
3
4
5
6
7
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

思路

递归

常规递归即可

迭代

队列解决

解答

递归

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function (root) {
const res = [];
const preOrder = (root) => {
if (!root) return;
res.push(root.val);
preOrder(root.left);
preOrder(root.right);
};
preOrder(root);
return res;
};

迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number[]}
*/
var preorderTraversal = function (root) {
const queue = [];
const res = [];
if (root) queue.push(root);
while (queue.length) {
const root = queue.shift();
res.push(root.val);
if (root.right) queue.unshift(root.right);
if (root.left) queue.unshift(root.left);
}
return res;
};