二叉树的层序遍历(leetcode - 102)
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
思路
- 创建一个数组
res
,用来存放层序遍历的节点 - 对二叉树进行广度优先遍历,每一层出队列时,都
push
到新创建的数组中 - 直至队列为空,返回
res
var levelOrder = function(root) {
if(!root) return [];
let queue = [root];
const res = [];
while(queue.length) {
let len = queue.length;
res.push([])
while(len--) {
let n = queue.shift();
res[res.length - 1].push(n.val)
if(n.left) queue.push(n.left);
if(n.right) queue.push(n.right);
}
}
return res;
};
二叉树的中遍历(leetcode - 94)
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
递归
var inorderTraversal = function(root) {
const res = [];
const inorder = (n) => {
if(!n) return;
if(n.left) inorder(n.left);
res.push(n.val);
if(n.right) inorder(n.right);
}
inorder(root);
return res;
};
栈与迭代
var inorderTraversal = function(root) {
const res = [];
if(!root) return res
const stack = []
let p = root;
while(stack.length || p) {
while(p){
stack.push(p);
p = p.left;
}
const n = stack.pop();
res.push(n.val)
p = n.right
}
return res;
};