1、递归(分治法)
class Solution:
def Traversal(self, root: TreeNode) -> List[int]:
if not root:
return []
# 前序遍历
return [root.val] + self.Traversal(root.left) + self.Traversal(root.right)
# 中序遍历
return self.Traversal(root.left) + [root.val] + self.Traversal(root.right)
# 后序遍历
return self.Traversal(root.left) + self.Traversal(root.right) + [root.val]
2、非递归(迭代法)
class Solution:
def Traversal(self, root: TreeNode) -> List[int]:
res = []
stack = []
cur = root
# 前序遍历
while stack or cur:
while cur:
res.append(cur.val)
stack.append(cur)
cur = cur.left
cur = stack.pop()
cur = cur.right
return res
# 中序遍历
while stack or cur:
while cur:
stack.append(cur)
cur = cur.left
cur = stack.pop()
res.append(cur.val)
cur = cur.right
return res
# 后序遍历
while stack or cur:
while cur:
res.append(cur.val)
stack.append(cur)
cur = cur.right
cur = stack.pop()
cur = cur.left
return res[::-1]