递归实现中序遍历
// 递归实现二叉树中序遍历
function midOrderTraverse(root) {
if (!root) return
preOrderTraverse(root.left)
console.log(root.val)
preOrderTraverse(root.right)
}
迭代实现中序遍历
// 迭代实现二叉树前序遍历
function midOrderTraverse(root) {
const result = []
if (!root) return
const stack = []
// 用一个指针指向根节点
let current = root
while (current || stack.length) {
// 不断遍历,找到最左边节点过程中的节点都放到 stack 中
while (current) {
stack.push(current)
current = current.left
}
// current 指向最左边节点并放入结果
current = stack.pop()
result.push(current.val)
// current 指向最左子节点的右节点,右子节点为 null 时即 current 为 null,进入下一次循环
// 下一次循环中,current 为 null,此时处理的就是最左子节点的父节点
// 再指向右节点时,相当于下一次循环中处理的就是右子节点
// 满足:左 -> 中 -> 右的顺序
// 第一次去值时取 `stack.pop()` 为最左子节点,此时 `cur.right` 为 null,
// 下一次循环时,取最左子节点的父节点,逻辑:**左 -> 中**
// 处理 父节点 后,`cur.right` 如果不是 null,
// 则开始处理右侧节点,逻辑:**中 -> 右**
current = current.right
}
return result
}