作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Python3 为二叉搜索树编写 BFS 算法。
我首先初始化了这个类,定义了一个插入方法,并插入了一些随机数:
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def insert(self, data):
if data <= self.data:
if self.left == None:
self.left = Node(data)
else:
self.left.insert(data)
else:
if self.right == None:
self.right = Node(data)
else:
self.right.insert(data)
root = Node(1)
root.insert(0)
root.insert(2)
root.insert(1.5)
root.insert(2.4)
root.insert(1.6)
root.insert(2.3)
def inLineTraversal(self, queue=[]):
if queue == []: # Base condition
return
temp = queue
for node in temp:
print(node.data)
if node.left != None:
queue.append(node.left)
if node.right != None:
queue.append(node.right)
queue.pop(0)
self.inLineTraversal(queue)
1,2,2.4,1.5,2.3,2.3,1.6
与
1,0,2,1.5,2.4,1.6,2.3
的正确结果相反.
1,0,2,1.5,2.4,1.6,2.3
:
def inLineTraversal(self):
queue = [self]
while queue != []:
s = queue.pop(0)
print(s.data)
if s.left != None:
queue.append(s.left)
if s.right != None:
queue.append(s.right)
最佳答案
问题出在这一行:
temp = queue
queue
的新副本,正如您可能预期的那样,它只是给它一个额外的名称
temp
- 但两个名字都指向同一个列表。
temp = queue[:]
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def insert(self, data):
if data <= self.data:
if self.left == None:
self.left = Node(data)
else:
self.left.insert(data)
else:
if self.right == None:
self.right = Node(data)
else:
self.right.insert(data)
def inLineTraversalRecursive(self, queue=[]):
if queue == []: # Base condition
return
temp = queue[:]
for node in temp:
print(node.data)
if node.left != None:
queue.append(node.left)
if node.right != None:
queue.append(node.right)
queue.pop(0)
self.inLineTraversal(queue)
def inLineTraversalLoop(self):
queue = [self]
while queue != []:
s = queue.pop(0)
print(s.data)
if s.left != None:
queue.append(s.left)
if s.right != None:
queue.append(s.right)
root = Node(1)
root.insert(0)
root.insert(2)
root.insert(1.5)
root.insert(2.4)
root.insert(1.6)
root.insert(2.3)
root.inLineTraversalLoop()
print()
root.inLineTraversalRecursive([root])
1
0
2
1.5
2.4
1.6
2.3
1
0
2
1.5
2.4
1.6
2.3
关于二叉搜索树上广度优先搜索的Python实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61436623/
我是一名优秀的程序员,十分优秀!