二叉树的中序遍历
左子树 => 根节点 => 右子树
递归
利用函数执行栈即可快速实现。
function inorderTraversal(root: TreeNode | null): number[] {
const ret: number[] = []
const inorder = (root: TreeNode | null) => {
if (!root) return
inorder(root.left)
ret.push(root.val)
inorder(root.right)
}
inorder(root)
return ret
}
迭代
递归隐式地维护了一个栈,而迭代则需要手动维护。
function inorderTraversal(root: TreeNode | null): number[] {
const ret: number[] = []
const stack: TreeNode[] = []
while (root || stack.length) {
while (root) {
stack.push(root)
root = root.left
}
root = stack.pop() as TreeNode | null
ret.push(root!.val)
root = root!.right
}
return ret
}