【发布时间】:2014-04-26 08:38:36
【问题描述】:
我想逐级迭代地打印二叉树,而不使用出队或除 python 列表之外的任何其他数据结构。我在网上看过,大多数都是上面提到的方法之一。
如果我有一棵树:
41
/ \
7 53
/ \ /
1 19 47
我希望它像这样打印:
41
7
53
1
19
47
这是我的尝试,但它不会打印出 bst 中的所有值:
def levelorder(self):
current = self._root
current_left = current_right = self._root
a = [current._value]
while current_left is not None and current_right is not None:
current_left = current_left._left
current_right = current_right._right
if current_left is not None:
a.append(current_left._value)
if current_right is not None:
a.append(current_right._value)
return a
这是它的输出:
[41, 7, 53, 1]
知道我的代码有什么问题吗?以及如何解决这个问题?
树类:
class _BSTNode:
def __init__(self, value):
self._value = copy.deepcopy(value)
self._left = None
self._right = None
self._height = 1
return
class BST:
def __init__(self):
self._root = None
self._count = 0
self.comparisons = 0
return
def levelorder(self):
levels = [[self._root]]
while levels[-1]:
nextlevel = []
for node in levels[-1]:
nextlevel.extend([node for node in (node._left, node._right) if node])
levels.append(nextlevel)
return levels[:-1]
和我的主要部分:
b = BST()
b.insert(41)
b.insert(7)
b.insert(53)
b.insert(1)
b.insert(19)
b.insert(47)
print (b.levelorder())
【问题讨论】:
-
这个好像已经回答了here
-
@Lawrence 标题表示寻求迭代解决方案。
-
递归深度迭代:)
-
寻找广度优先搜索算法
标签: python python-3.x binary-search-tree