1、编写程序,编写节点类且有name属性 ,实例化6个节点,A节点和B、C、D有关联,B和E、F有关联,那么编写程序,使得程序从A开始,以三种顺序打印节点名
[if !supportLists](1) [endif]A、B、C、D、E、F
[if !supportLists](2) [endif]F、E、D、C、B、A
[if !supportLists](3) [endif]E、F、B、C、D、A
#-*- encoding:utf-8 -*-
#建立题目中的节点
class Node:
def __init__(self,name):
self.name = name
self.__node_list = []
def extend_nodes(self,*args):
self.__node_list.extend(args)
#添加关联节点
def add_node(self,node):
self.__node_list.append(node)
#当前节点是否有 关联节点
def is_node_list_empty(self):
if len(self.__node_list) == 0:
return True
else:
return False
#返回并删除关联的节点
def pop_first_one_node_in_list(self):
return self.__node_list.pop(0)
#返回并删除关联的节点,从列表后面开始
def pop_last_one_node_in_list(self):
return self.__node_list.pop()
def show_node_list(self):
for node in self.__node_list:
print node
def __str__(self):
return "node:%s"%self.name
node_a = Node("A")
node_b = Node("B")
node_c = Node("C")
node_d = Node("D")
node_e = Node("E")
node_f = Node("F")
node_a.extend_nodes(node_b,node_c,node_d)
# node_a.show_node_list()
node_b.extend_nodes(node_e,node_f)
# node_b.show_node_list()
def travel_1(node):
#队列
queue = []
queue.append(node)
while queue:
e = queue.pop(0)
print e
while not e.is_node_list_empty():
queue.append(e.pop_first_one_node_in_list())
def travel_2(node):
queue = []
result = []
queue.append(node)
while queue:
e = queue.pop(0)
result.insert(0,e)
while not e.is_node_list_empty():
queue.append(e.pop_first_one_node_in_list())
for node in result:
print node
def travel_3(node):
stack = []
stack.append(node)
while stack:
e = stack[-1]
if not e.is_node_list_empty():
new_node = e.pop_first_one_node_in_list()
stack.append(new_node)
else:
print stack.pop()
# travel_1(node_a)
# travel_2(node_a)
travel_3(node_a)