class Node():
def __init__(self, item):
self.item = item
self.left = None
self.right = None
class Tree():
def __init__(self):
self.root = None
def addNode(self, item):
node = Node(item)
if self.root == None:
self.root = node
return
cur = self.root
q = [cur]
while q:
nd = q.pop(0)
if nd.left == None:
nd.left = node
return
else:
q.append(nd.left)
if nd.right == None:
nd.right = node
return
else:
q.append(nd.right)
def travle(self):
cur = self.root
q = [cur]
while q:
nd = q.pop(0)
if nd.left:
q.append(nd.left)
if nd.right:
q.append(nd.right)
def front(self, root):
if root == None:
return
print(root.item)
self.front(root.left)
self.front(root.right)
def middle(self, root):
if root == None:
return
self.middle(root.left)
print(root.item)
self.middle(root.right)
def behind(self, root):
if root == None:
return
self.behind(root.left)
self.behind(root.right)
print(root.item)
t = Tree()
t.addNode(1)
t.addNode(2)
t.addNode(3)
t.addNode(4)
t.addNode(5)
t.addNode(6)
t.addNode(7)
# t.travle()
t.front(t.root)
# t.middle(t.root)
# t.behind(t.root)
前中后序遍历的规律:
前序:根左右,先遍历根,然后依次遍历左节点里面的节点(以本节点为根,然后按根左右遍历)得到1245,之后遍历右节点里面的节点(以本节点为根,然后按根左右遍历)得到367,故结果为1245367
中序:左根右,下图可以看成三个节点,把这三个节点按照左根右的方式去遍历,先遍历左边的(245这个)得到425,然后左边这个就遍历完了,之后遍历中间,得到的是4251,左和根都遍历完了要遍历右边,碰到3的时候发现3下面有子节点,就先按照左根右去遍历子节点,得到637,故结果为4251637
后序:左右根,先遍历左边得到452,然后遍历右边(左右根)673,最后遍历根节点得到1,故结果为4526731
其实树的遍历是一种递归的思想
上图的前序:1245367
上图的中序:4251637
上图的后序:4526731