classQueue:def __init__(self,max_size):
self.max_size=int(max_size)
self.queue=[]defput(self,data):if self.max_size >0:ifself.full():raise ValueError(‘Queue is full!‘)else:
self._put(data)defget(self):if self._queue_size() >0:
result=self._get()
empty_flag=Falseelse:
result=None
empty_flag=Truereturnresultdefempty(self):if self._queue_size() ==0:returnTrueelse:returnFalsedeffull(self):if self._queue_size() ==self.max_size:returnTrueelse:returnFalsedef_put(self,data):
self.queue.append(data)def_get(self):
result=self.queue[0]
self.queue.pop(0)returnresultdef_queue_size(self):returnlen(self.queue)classTreeRoot:def __init__(self,root_node):
self.root=root_nodedef travel_dbfs(self):#图的深度遍历
stack_lsit =[]
visited=[]
stack_list.append(self.root)
visited.append(self.root)while len(stack_list) >0:
x= stack_list[-1]for w inx.child_list:if not w invisited:print(w.name)
visited.append(w)
stack_lsit.append(w)break
if stack_list[-1] ==x:
stack_list.pop()def travel_bfs(self):#图的广度遍历
queue = Queue(100000)
visited=[]
queue.put(self.root)
visited.append(self.root)while notqueue.empty():
v=queue.get()
i= 1
try:
w=v.child_list[i]exceptIndexError:
w=Nonewhilew:if not w invisited:print(w.name)
visited.append(w)
queue.put(w)
i= i+1
try:
w=v.child_list[i]exceptIndexError:
w=Nonereturnvisiteddefsearch(self,keyword):
visited_list=self.travel_bfs()for v invisited_list:if v.data ==keyword:returnvreturnNonedefbuilt(self,node):
parent=node.parent
v=self.search(parent.data)
v.child_list.append(node)classTreeNode:def __init__(self,name,groupid):
self.parent=None
self.child_list=[]
self.name=name
self.groupid= groupid