在有了上篇文章队栈的概念后,相信构造一棵树也变得非常简单。本文构建的树是比较传统的树,即父节点下可以拥有多个子节点,并非二叉树,因为我的目标是为了给SPADE算法做铺垫,并非做查找。
首先我想构造这样一棵树:根节点下有A,B,C三个元素,A元素下有D,E元素,C元素下有F元素,E元素下有G,H,I,K元素(由于mac下没有合适的画图软件,没有插图,抱歉),大致思路就是将全部的元素推入一个队列queue中,同时列表list作为临时列表存放该节点下的子节点,finallist作为最终列表,存放树结构(字符串形式)。
废话不多说,直接上代码了,代码自己敲的如有雷同纯属胡扯,代码好懂,老规矩不加注释,同行请拷,同学勿抄。
#coding:utf-8
class Tree(object):
def __init__(self):
self.queue = []
self.list = []
self.finallist = []
self.topright = 0
def addin(self):
while True:
if self.queue == []:
num = input("请输入root下成员个数:")
print("请输入成员:")
for i in range(num):
ele = raw_input()
self.queue.append(ele)
self.topright += 1
self.topright -= 1
self.finallist.append("root->%s" %self.queue)
else:
x = self.queue[0]
self.queue.pop(0)
num = input("请输入%s成员下的成员个数:" %x)
if num != 0:
print("请输入成员:")
for i in range(num):
ele = raw_input()
self.queue.append(ele)
self.list.append(ele)
self.topright += 1
self.topright -= 1
if self.list != []:
self.finallist.append("%s->%s" %(x, self.list))
self.list = []
if self.queue == []:
print(self.finallist)
break
s = Tree()
s.addin()
输入输出结果如下:
请输入root下成员个数:3
请输入成员:
a
b
c
请输入a成员下的成员个数:2
请输入成员:
d
e
请输入b成员下的成员个数:0
请输入c成员下的成员个数:1
请输入成员:
f
请输入d成员下的成员个数:0
请输入e成员下的成员个数:4
请输入成员:
g
h
i
k
请输入f成员下的成员个数:0
请输入g成员下的成员个数:0
请输入h成员下的成员个数:0
请输入i成员下的成员个数:0
请输入k成员下的成员个数:0
["root->['a', 'b', 'c']", "a->['d', 'e']", "c->['f']", "e->['g', 'h', 'i', 'k']"]