递归实现中序遍历 // 递归实现二叉树中序遍历 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 }