#方法一:递归法
# class Solution:
# def inorderTraversal(self,root):
# res=[]
# def dfs(node):
# if node is None:
# return
# #下面代码是不对的,没有体现递归
# #res.append(node.left)
# dfs(node.left)
# res.append(node.val)
# #res.append(node.right)
# dfs(node.right)
# dfs(root)
# return res
#方法二:迭代法,用指针来记录节点,用栈来处理节点
# class Solution:
# def inorderTraversal(self, root):
# if not root:
# return []
# #不能提前将root节点加入stack中,因为先放进去就要被处理
# stack = []
# result = []
# cur = root
# #怪不得叫dfs,先寻找到左子树的最底层
# while cur or stack:
# # 先迭代访问最底层的左子树节点
# if cur:
# stack.append(cur)
# cur = cur.left
# # 到达最左节点后处理栈顶节点
# else:
# cur = stack.pop()
# result.append(cur.val)
# # 取栈顶元素右节点
# cur = cur.right
# return result
class Solution:
def inorderTraversal(self,root):
if not root:
return []
res=[]
stack=[]
cur=root
#如果当前节点cur不为空,就继续下去,如果为空就去栈内寻找
while cur or stack:
#下面这行代码不能先执行,否则就把root的值先存下来了
#stack.append(cur.val)
if cur:
stack.append(cur)
cur=cur.left
else:
cur=stack.pop()
res.append(cur.val)
cur=cur.right
return res