介绍
树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现
广度优先遍历
从树的root开始,从上到下从从左到右遍历整个树的节点
def breadth_travel(self):
"""利用队列实现树的层次遍历"""
if root == None:
return
queue = []
queue.append(root)
while queue:
node = queue.pop(0)
print node.elem,
if node.lchild != None:
queue.append(node.lchild)
if node.rchild != None:
queue.append(node.rchild)
深度优先遍历
(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.inorder(root.lchild)
print root.elem
self.inorder(root.rchild)
(3)后序遍历:左子树->右子树->根节点(先递归使用后序遍历访问左子树和右子树,最后访问根节点)
def postorder(self, root):
"""递归实现后续遍历"""
if root == None:
return
self.postorder(root.lchild)
self.postorder(root.rchild)
print root.elem