对于⼀颗⼆叉树,深度优先搜索是沿着树的深度遍历树的节点,尽可能深的搜索树的分⽀。
深度遍历有重要的三种⽅法,这三种⽅式常被⽤于访问树的节点,它们之间的不同在于访问每个节点的次序不同。
这三种遍历分别叫做先序遍历,中序遍历和后序遍历。
我们来给出详细定义,然后举例看它们的应⽤。
1.先序遍历
在先序遍历中,我们先访问根节点,然后递归使⽤先序遍历访问左⼦树,再递归使⽤先序遍历访问右⼦树
顺序:
根节点->左⼦树->右⼦树
def preorder(self, root):
"""递归实现先序遍历"""
if root == None:
return
print(root.elem)
self.preorder(root.lchild)
self.preorder(root.rchild)
2.中序遍历
在中序遍历中,我们递归使⽤中序遍历访问左⼦树,然后访问根节点,最后再递归使⽤中序遍历访问右⼦树
顺序:
左⼦树->根节点->右⼦树
def inorder(self, root):
"""递归实现中序遍历"""
if root == None:
return
self.preorder(root.lchild)
print(root.elem)
self.preorder(root.rchild)
3.后序遍历
在后序遍历中,我们先递归使⽤后序遍历访问左⼦树和右⼦树,最后访问根节点
顺序:
左⼦树->右⼦树->根节点
def postorder(self, root):
"""递归实现后序遍历"""
if root == None:
return
self.preorder(root.lchild)
self.preorder(root.rchild)
print(root.elem)