思路1:中序二叉树的递归算法。
# 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) -> List[int]:
ans = []
self.inorderTraversal2(root,ans)
return ans
def inorderTraversal2(self, root: TreeNode,ans) -> List[int]:
if root:
self.inorderTraversal2(root.left,ans) # 左
ans.append(root.val) # 中
self.inorderTraversal2(root.right,ans) # 右
return ans
思路2:中序二叉树的非递归算法(手动维护栈)。
# 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) -> List[int]:
ans,stack = [],[]
p = root
while p or stack:
while p:
stack.append(p)
p=p.left
p = stack.pop()
ans.append(p.val)
p = p.right
return ans