94. 二叉树的中序遍历
94. 二叉树的中序遍历
递归
function inorderTraversal(root: TreeNode | null): number[] {
if (!root) {
return []
}
const result = []
let currentNode = root
// 先处理左侧结点
const leftResult = inorderTraversal(currentNode.left)
result.push(...leftResult)
// 再处理当前结点
result.push(currentNode.val)
// 然后处理右侧结点
const rightResult = inorderTraversal(currentNode.right)
result.push(...rightResult)
return result
}
迭代
function inorderTraversal(root: TreeNode | null): number[] {
if (!root) {
return []
}
const stack = []
const result = []
let currentRoot = root
while (currentRoot || stack.length) {
// 处理左结点
while (currentRoot) {
// 先将根结点推入栈
stack.push(currentRoot)
// 然后遍历左结点
currentRoot = currentRoot.left
}
// 回到根结点
// 从栈中将根结点取出
currentRoot = stack.pop()
// 中序遍历,在左结点处理后取值
result.push(currentRoot.val)
// 处理右结点
currentRoot = currentRoot.right
}
}