本文最后更新于:2023年3月19日 晚上
Lt102. 二叉树的层序遍历、Lt94. 二叉树的中序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7]
,
返回其层次遍历结果:
1 2 3 4 5
| [ [3], [9,20], [15,7] ]
|
思路
复习,使用队列的 BFS
解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
var levelOrder = function (root) { if (!root) return []; const queue = []; const res = []; queue.push(root); while (queue.length) { const temp = queue.splice(0, queue.length); const val = []; while (temp.length) { const node = temp.shift(); val.push(node.val); if (node.left) queue.push(node.left); if (node.right) queue.push(node.right); } res.push(val); } return res; };
|
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
示例 1:
示例 2:
示例 3:
示例 4:
示例 5:
提示:
- 树中节点数目在范围
[0, 100]
内
-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
思路
递归
常规递归即可
迭代
将指向 root 节点的所有左子树加入栈中,直到指针指向的节点左子树为 null。将栈中栈顶元素出栈,将对应的值加入结果数组,将 root 指向该元素的右子树,继续以上将左子树加入栈中的过程。
解答
递归
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
var inorderTraversal = function (root) { const res = []; const traverse = (root) => { if (!root) return; traverse(root.left); res.push(root.val); traverse(root.right); }; traverse(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 25 26 27 28 29
|
var inorderTraversal = function (root) { const res = []; const stack = [];
while (root || stack.length) { if (root) { stack.push(root); root = root.left; } else { const node = stack.pop(); res.push(node.val); root = node.right; } }
return res; };
|