# 代码随想录训练营第III期--014--python
# 理论基础
# 递归遍历
# # 144.二叉树的前序遍历
def recurrent_preorder(root):
res = []
def preorder(root):
if not root:
return
res.append(root.val)
preorder(root.left)
preorder(root.right)
preorder(root)
return res
# # 94.二叉树的中序遍历
def recur_inorder(root):
res = []
def inorder(root):
if not root:
return
inorder(root.left)
res.append(root.val)
inorder(root.right)
inorder(root)
return res
# # 145.二叉树的后序遍历
def recur_postorder(root):
res = []
def postorder(root):
if not root:
return
postorder(root.left)
postorder(root.right)
res.append(root.val)
postorder(root)
return res
# 迭代遍历
# # 144.二叉树的前序遍历
def stack_preorder(root):
if not root:
return []
res = []
stack = [root]
while stack:
node = stack.pop()
res.append(node.val)
if node.right:
stack.append(node.right)
if node.left:
stack.append(node.left)
return res
# # 94.二叉树的中序遍历
def stack_inorder(root):
if not root:
return []
res = []
stack = [root]
while stack or root:
while root:
stack.append(root)
root = root.left
node = stack.pop()
res.append(node.val)
root = node.right
return res
# # 145.二叉树的后序遍历
def stack_postorder(root):
if not root:
return []
res = []
stack = [root]
prev = None
while root or stack:
while root:
stack.append(root)
root = root.left
node = stack.pop()
if not node.right or node.right == prev:
res.append(node.val)
prev = node
root = None
else:
stack.append(node)
root = node.right
return res
# 统一迭代
# # 144.二叉树的前序遍历
# # 145.二叉树的后序遍历
# # 94.二叉树的中序遍历
代码随想录训练营第III期--014--python
最新推荐文章于 2023-06-05 04:56:18 发布