持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第26天,点击查看活动详情
题目
给定一个二叉树的根节点
root,返回它的中序遍历。
输入: root = [1,null,2,3]
输出: [1,3,2]
题解
这里采用递归的方式进行实现,我们先声明一个
res变量,用于存储最后结果默认是空数组,然后在声明一个iteration函数用于递归操作,接受一个r的入参,进入iteration函数后,我们先判断当前出参r是否存在,如果不存在则直接返回,如果存在则将出参r的左节点传给自身进行调用,然后在将当前出参r的val属性通过push方法追加到res变量中,然后在将出参r的右节点传给自身进行调用,然后我们在递归函数的外部将当前出参root传递进去,最后待递归函数执行完后将res变量返回即可
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
let res = []
let iteration = (r) => {
if (!r) return
iteration(r.left)
res.push(r.val)
iteration(r.right)
}
iteration(root)
return res
};
这里通过遍历的方式进行实现,我们先声明一个
list数组,用于存放中序遍历顺序,在声明一个stack数组,用于控制任务堆栈,模拟递归,在声明一个cur变量指向的是出参root,然后使用循环,循环的条件为当前cur变量或者stack数组数据不为空则进行循环,在循环中我们先判断当前cur变量是否不为空,不为空则使用push方法将cur变量追加到stack数组中,在将出参root左节点赋值给cur变量,如果为空,则使用pop方法获取stack数组的末尾值并赋值给cur变量,在将当前cur变量的val属性通过push方法追加到list数组中,然后在将当前cur变量的右节点赋值给cur变量,当循环完成后,我们直接将list数组返回出去
var inorderTraversal = function(root) {
let list = []
let stack = []
let cur = root
while(cur || stack.length) {
if (cur) {
stack.push(cur)
cur = cur.left
} else {
cur = stack.pop()
list.push(cur.val)
cur = cur.right
}
}
return list
};
坚持努力,无惧未来!