var inorderTraversal = function (root) {
const res = []
function inorder(root) {
if (!root) return // 递归边界,root 为空
inorder(root.left) // 递归遍历左子树
res.push(root.val) //当前遍历的结点值
inorder(root.right) // 递归遍历右子树
}
inorder(root)
return res
};
迭代实现:
var inorderTraversal = function (root) {
const res = [] //定义结果数组
const stack = [] //初始化栈结构
let cur = root // 用一个cur当游标
while (cur || stack.length) { // 当 cur 不为空、或者 stack 不为空时,重复以下逻辑
while (cur) { // 这个 while 的作用是把寻找最左叶子结点的过程中,途径的所有结点都记录下来
stack.push(cur)
cur = cur.left
}
//取出栈顶元素
cur = stack.pop()
//将栈顶元素
res.push(cur.val)
cur = cur.right // 尝试读取 cur 结点的右孩子
}
return res
};
var levelOrder = function (root) {
const res = [] //初始化结果数组
if(!root) return [] //处理边界条件
const queue = [] //初始化队列
queue.push(root) //根节点先入列
while (queue.length) { // 队列不为空,说明没有遍历完全
let subRes = []
for (let i = 0; i < queue.length; i++) {
let cur = queue.shift() //取出队头元素
subRes.push(cur.val)
if (cur.left) queue.push(cur.left)
if (cur.right) queue.push(cur.right)
}
res.push(subRes)
}
return res
};