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