class Solution:
def inorderTraversal(self, root: TreeNode):
res = []
s = [] #栈
p = root #工作节点
while p or s:
# 找最左子,路上依次入栈
while p:
s.append(p)
p = p.left
# 走到最左子,弹栈
p = s.pop()
res.append(p.val)
#对右子执行如上操作
p = p.right
return res
js:
/**
* @param {TreeNode} root
* @return {number[]}
*/
var inorderTraversal = function(root) {
const res = []
let p = root
const stack = []
while (p || stack.length > 0) {
while (p) {
stack.push(p)
p = p.left
}
p = stack.pop() // 到达最左叶节点就弹栈,访问该节点
res.push(p.val)
p = p.right // 访问该节点右子
}
return res
};