题目描述:
给定一个二叉树,返回它的中序 遍历
示例:
image.png
如图所示:二叉树中序遍历顺序为 A B C D E F G H I

解题思路:
1.存在左叶子节点:根节点更新为左叶子节点,将根节点存储在栈中,用于查找的节点左右叶子节点都不存在时获取新的根节点;
2.存在右叶子节点:将根节点的值压栈,并将根节点更新为右叶子节点。
3.没有左右叶子节点:将此时根节点的值压栈,获取新的根节点并将该新的根节点的左叶子节点赋值为null。
实现代码:
let inorderTraversal = root => {
let res = [];
let stack = [];
while (root || stack.length) {
if (root.left) {
stack.push(root);
root = root.left;
} else if (!root.left && !root.right) {
res.push(root.val);
root = stack.pop();
root && (root.left = null)
} else if (root.right) {
res.push(root.val);
root = root.right;
}
}
return res
}
网友评论