class Queue: def __init__(self, limit=10): self.data = [None] * limit self.head = -1 self.tail = -1
时间: 2024-05-22 07:14:47 浏览: 12
def is_empty(self): return self.head == -1 def is_full(self): return (self.tail + 1) % len(self.data) == self.head def enqueue(self, val): if self.is_full(): raise Exception("Queue is full") if self.head == -1: self.head = 0 self.tail = (self.tail + 1) % len(self.data) self.data[self.tail] = val def dequeue(self): if self.is_empty(): raise Exception("Queue is empty") val = self.data[self.head] if self.head == self.tail: self.head = -1 self.tail = -1 else: self.head = (self.head + 1) % len(self.data) return val
相关问题
优化代码:class BiTreeNode: def __init__(self, data=None): self.data = data self.l_child = None self.r_child = None class BiTree(object): def __init__(self, root=None): self.r_child = None self.l_child = None self.root = root @classmethod def createBiTree(cls, order): q = LinkQueue() root = BiTreeNode() bt = BiTree(root) q.offer(root) for i in range(len(order)): c = order[i] node = q.peek() if node.l_child is None: newNode = BiTreeNode(c) node.l_child = newNode q.offer(newNode) elif node.r_child is None: newNode = BiTreeNode(c) node.r_child = newNode q.offer(newNode) q.poll() return bt
可以考虑对代码进行如下优化:
1. 可以将BiTree类中的r_child和l_child属性移除,因为这两个属性在BiTreeNode类中已经定义了。
2. 可以将createBiTree方法改为实例方法,因为它需要访问实例属性root。
3. 可以将LinkQueue替换为Python内置的queue.Queue,这样可以避免引入外部依赖。
4. 可以将LinkQueue.offer和LinkQueue.poll方法改为queue.Queue.put和queue.Queue.get方法,因为它们的功能是相同的。
5. 可以将循环中的len(order)提前计算出来,这样可以避免在每次循环时都重新计算长度。
改进后的代码如下:
```
from queue import Queue
class BiTreeNode:
def __init__(self, data=None):
self.data = data
self.l_child = None
self.r_child = None
class BiTree(object):
def __init__(self, root=None):
self.root = root
def createBiTree(self, order):
q = Queue()
root = BiTreeNode()
self.root = root
q.put(root)
order_len = len(order)
for i in range(order_len):
c = order[i]
node = q.get()
if node.l_child is None:
newNode = BiTreeNode(c)
node.l_child = newNode
q.put(newNode)
elif node.r_child is None:
newNode = BiTreeNode(c)
node.r_child = newNode
q.put(newNode)
return self
```
优化后的代码使用Python内置的Queue代替了LinkQueue,简化了代码。同时也将BiTree类的r_child和l_child属性移除,减少了代码冗余。
class BiTree: def __init__(self): self.root = None def insert(self, data): node = TreeNode(data) if self.root is None: self.root = node else: queue = [self.root] while queue: tree = queue.pop(0) if tree.left is None: tree.left = node break elif tree.right is None: tree.right = node break else: queue.append(tree.left) queue.append(tree.right)
这是一个二叉树的定义以及插入操作的Python代码。
首先,我们定义了一个 `BiTree` 类,并在 `__init__` 方法中初始化了二叉树的根节点 `root` 为 `None`。
接下来,我们定义了一个 `insert` 方法来插入新节点到二叉树中。在方法中,我们首先创建一个 `TreeNode` 对象,并将要插入的数据 `data` 作为参数传递给它。
如果二叉树为空,我们将新节点设置为根节点。
否则,我们创建一个队列 `queue`,并将根节点 `self.root` 加入队列中。然后,我们进入一个循环,直到队列为空为止。在循环中,我们从队列中取出第一个节点 `tree`,并判断它的左右子节点是否为空。
如果左子节点为空,我们将新节点插入到左子节点,并结束循环。
如果右子节点为空,我们将新节点插入到右子节点,并结束循环。
如果左右子节点都不为空,我们将左右子节点依次加入队列中,以便后续继续遍历。
最后,我们完成了二叉树的插入操作。
需要注意的是,上述代码中并没有给出 `TreeNode` 类的定义。如果需要测试该二叉树的功能,还需要定义 `TreeNode` 类并在其中存储节点的数据、左右子节点等信息。