思路:
把中序遍历分为一个有三个阶段的循环,左子节点入栈,没有右子节点出栈,
有右子节点则出栈并且右子节点入栈。
代码:
二叉树节点定义如下
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
class Solution:
def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
ans=[]
if(root==None):
return []
st=[root]
while(st):
root=st[-1]
while(root.left!=None):
st.append(root.left)
root=root.left
while(st and st[-1].right==None):
ans=ans+[st.pop().val]
if(st):
right_node=st.pop()
ans=ans+[right_node.val]
st.append(right_node.right)