题目
给定一个二叉树的根节点 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 };