二叉树的中序遍历
一、题目
给定一个二叉树的根节点 root
,返回 它的 中序 遍历 。
示例
输入:root = [1,null,2,3]
输出:[1,3,2]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
二、题解
方法1(递归算法)
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function (root) {
if (!root) return []
let res = []
const inorder = (root) => {
if (!root) { return; }
inorder(root.left);
res.push(root.val)
inorder(root.right);
};
inorder(root)
return res
};
方法2(迭代算法)
用栈来实现
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
if (!root) return [];
let res = []
const stack = [];
let p = root;
while (stack.length || p) {
// 先把左子树推入栈
while (p) {
stack.push(p);
p = p.left;
}
// 把最尽头的左节点弹出来
const n = stack.pop();
res.push(n.val)
// 访问右节点
p = n.right;
}
return res
};