94.二叉树的中序遍历
30min
中序遍历的顺序是 左 - 中 - 右
递归
用递归非常容易
var inorderTraversal = function(root) {
var res = []
if (!root) {
return res
}
var travel = function (node) {
node.left && travel(node.left)
res.push(node.val)
node.right && travel(node.right)
}
travel(root)
return res
};迭代
迭代的步骤复杂一些,因为根节点不是先输出,所以需要保留根节点
- 根节点入栈,判断有没有左子节点,如果有,继续入栈,直到叶子结点
- 出栈,输出,判断是否有右子节点,有则入栈,继续执行2
var inorderTraversal = function(root) {
var stack = []
var res = []
if (!root) return res
stack.push(root)
while(root.left) {
stack.push(root.left)
root = root.left }
while(stack.length) {
// 此时栈顶是树中最左的节点 var node = stack.pop()
res.push(node.val)
// 存在右节点,入栈后继续找左节点 if (node.right) {
node = node.right stack.push(node)
while(node.left) {
stack.push(node.left)
node = node.left }
}
}
return res
};