用于实现二叉树的级别顺序遍历的队列类
class QNode:
def __init__ (self, x, p=None):
self.data = x
self.next = p
class Queue:
def __init__ (self):
self.front = None
self.back = None
def isEmpty(self):
return self.front == None
def enqueue (self, x):
p = QNode (x)
if self.isEmpty( ):
self.front = p
else:
self.back.next = p
self.back = p
def dequeue (self):
if self.isEmpty( ):
raise KeyError ("Queue is empty.")
x = self.front.data
self.front = self.front.next
if self.front == None:
self.back == None
return x
实际的二进制树节点类
class BSTNode:
def __init__ (self, x, L=None, R=None):
self.data = x
self.left = L
self.right = R
我想做多维的水平顺序遍历
def levelOrder(self):
ret = []
Q = Queue()
if self!=None:
Q.enqueue(self)
while not Q.isEmpty():
p = Q.dequeue()
ret.append(p.data)
if p.left!=None:
Q.enqueue(p.left)
if p.right!=None:
Q.enqueue(p.right)
return ret
在BSTNode类中,我尝试对二叉树进行级别顺序遍历。但是,它返回一个平面列表。如何使用多维数组输出实现级别顺序遍历?
答案 0 :(得分:1)
我能够弄清楚这一点。你基本上需要排队一个分隔符。由于显而易见的原因,我把它作为“[”。当我第一次将第一个节点排队时,我排队了一个“[”。然后当你去出队时,如果它是一个你要出列的分隔符,那么在添加子项之前添加另一个,并且还附加一个列表,其中包含自上一个分隔符以来出列的所有值的列表。这将创建您的级别订单遍历的多维列表。解决方案如下所示
def levelOrder(self):
order = []
suborder = []
Q = Queue()
if self!=None:
Q.enqueue(BSTNode('['))
Q.enqueue(self)
while not Q.isEmpty():
p = Q.dequeue()
if p.data is not '[' and p.data is not ']':
suborder.append(p.data)
if p.data == '[' and Q.front != None:
Q.enqueue(BSTNode(']'))
Q.enqueue(BSTNode('['))
if p.data == ']':
order.append(suborder)
suborder = []
if p.left!=None:
Q.enqueue(p.left)
if p.right!=None:
Q.enqueue(p.right)
return order