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