'''
leetcode 94. 二叉树的中序遍历
给定一个二叉树,返回它的中序遍历
'''
# Definition for a binary tree node.
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def inorderTraversal(self, root: TreeNode):
if root is None:
return []
if root.left is None and root.right is None:
return [root.val]
stack=[]# 构造辅助栈
curr=root
while(curr):
stack.append(curr)
curr=curr.left
result=[]
while(stack):
curr=stack.pop(-1)
# 当前节点出栈,说明当前节点的左子树中的所有元素都已经被访问完毕
result.append(curr.val)
if curr.right is not None:
curr=curr.right
while(curr):
stack.append(curr)
curr=curr.left
return result
if __name__=="__main__":
root=TreeNode(1)
root.right=TreeNode(3)
root.left=TreeNode(2)
root.left.left=TreeNode(4)
root.left.right=TreeNode(5)
root.right.right=TreeNode(7)
print(Solution().inorderTraversal(root))
# [4,2,5,1,3,7]