【发布时间】:2015-08-24 14:25:44
【问题描述】:
在 python 和任何其他语言中,使用队列数据结构很容易遍历(按照 BFS 级别顺序)二叉树。给定python中的邻接表表示和树的根,我可以按级别顺序遍历树并按顺序打印级别元素。尽管如此,我不能做的是从邻接表表示转到 level_dictionary 或类似的东西:
例如我想从
adjecency_list = {'A': {'B','C'}, 'C':{'D'}, 'B': {'E'}}
到
levels = {0: ['A'], 1: ['B','C'], 2: ['D','E']}
到目前为止,我有以下内容:
q = Queue()
o = OrderedDict()
root = find_root(adjencency_list) # Seperate function it works fine
height = find_height(root, adjencency_list) # Again works fine
q.put(root)
# Creating a level ordered adjecency list
# using a queue to keep track of pointers
while(not q.empty()):
current = q.get()
try:
if(current in adjencency_list):
q.put(list(adjencency_list[current])[0])
# Creating ad_list in level order
if current in o:
o[current].append(list(adjencency_list[current])[0])
else:
o[current] = [list(adjencency_list[current])[0]]
if(current in adjencency_list):
q.put(list(adjencency_list[current])[1])
# Creating ad_list in level order
if current in o:
o[current].append(list(adjencency_list[current])[1])
else:
o[current] = [list(adjencency_list[current])[1]]
except IndexError:
pass
它所做的只是将邻接列表放置在树的正确级别顺序中,如果我打印循环的开头,它将以级别顺序遍历打印。尽管如此,它并没有解决我的问题。我知道邻接表不是树的最佳表示,但我需要将它用于我正在做的任务。
【问题讨论】:
标签: python tree binary-tree breadth-first-search adjacency-list