二叉树的遍历主要分为以下四种:
先序遍历:【根左右】
中序遍历:【左根右】
后序遍历:【左右根】
层次遍历:从上到下,从左到右
以下图为例:
先序遍历:ABCDEFGHK
中序遍历:BDCAEHGKF
后序遍历:DCBHKGFEA
层次遍历:ABECFDGHK
代码实现:
class Node(object):
#节点类
def __init__(self,elem=-1,lchild=None,rchild=None):
self.elem = elem
self.lchild = lchild
self.rchild = rchild
class Tree(object):
#树类
def __init__(self):
self.root = Node()
def add(self,elem):
#为树添加节点
node = Node(elem)
if self.root.elem == -1:#如果树是空的,则对根节点赋值
self.root = node
else:
myQueue = []
treeNode = self.root
myQueue.append(treeNode)
while myQueue: #对已有的节点进行层次遍历
treeNode = myQueue.pop(0)
if not treeNode.lchild:
treeNode.lchild = node
return
elif not treeNode.rchild:
treeNode.rchild = node
else:
myQueue.append(treeNode.lchild)
myQueue.append(treeNode.rchild)
def pre_order_recursion(self,root): #前序遍历
if not root:
return
print(root.elem)
self.pre_order_recursion(root.lchild)
self.pre_order_recursion(root.rchild)
def in_order_recurdion(self,root): #中序遍历
if not root:
return
self.in_order_recurdion(root.lchild)
print(root.elem)
self.in_order_recurdion(root.rchild)
def post_order_recursion(self,root): #后序遍历
if not root:
return
self.post_order_recursion(root.lchild)
self.post_order_recursion(root.rchild)
print(root.elem)
def breadth_travel(self,root):#层次遍历
if not root:
return
queue = []
queue.append(root)
while queue:
node = queue.pop(0)
print(node.elem)
if node.lchild:
queue.append(node.lchild)
if node.rchild:
queue.append(node.rchild)