本文介绍树的遍历方式:前序遍历、中序遍历、后序遍历已经广度优先遍历
0.举例
比如上图二叉树遍历结果
前序遍历:ABCDEFGHK
中序遍历:BDCAEHGKF
后序遍历:DCBHKGFEA
1.先序遍历:
leetcode144:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def preorderTraversal(self, root: TreeNode) -> List[int]:
node = root
if node is None:
return []
stack = [node]
res = []
while stack:
pop=stack.pop()
res.append(pop.val)
if pop.right is not None:
stack.append(pop.right)
if pop.left is not None:
stack.append(pop.left)
return res
# 递归方式
# res = []
# def qian(node,res):
# if node is None:
# return
# res.append(node.val)
# qian(node.left,res)
# qian(node.right,res)
# qian(node,res)
# return res
2.中序遍历
leetcode94:
# 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]:
stack = [root]
res = []
cur = root
if root is None:
return []
while stack:
while cur.left :
cur = cur.left
stack.append(cur)
pop = stack.pop()
res.append(pop.val)
if pop.right:
cur = pop.right
stack.append(cur)
return res
# 递归
# def z(cur):
# if cur:
# z(cur.left)
# res.append(cur.val)
# z(cur.right)
# z(cur)
# return res
3.后序遍历
leetcode145:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def postorderTraversal(self, root: TreeNode) -> List[int]:
if root is None:
return []
cur = root
res = []
stack_i=[cur]
stack_o=[]
while stack_i:
pop=stack_i.pop()
stack_o.append(pop)
if pop.left is not None:
stack_i.append(pop.left)
if pop.right is not None:
stack_i.append(pop.right)
while stack_o:
res.append(stack_o.pop().val)
return res
# 递归
# def h(node):
# if node:
# h(node.left)
# h(node.right)
# res.append(node.val)
# h(cur)
# return res
4.广度优先遍历:请参考上一篇博文。https://blog.csdn.net/qq_38742161/article/details/88958342
5. 深度优先遍历:即为前序遍历。