【发布时间】:2020-12-12 16:57:31
【问题描述】:
我必须创建两个类:NonBinaryTree 和 SingleNode 类,它们包含一些在节点和整个树上工作的方法(在 NonBinaryTree 类中)。我在使用队列(先进先出类型)通过非二叉树实现 BFS(级别顺序)遍历时遇到了问题。由于二叉树有很多资源,每个节点最多有两个孩子,我没有找到任何可以帮助我解决非二叉树问题的东西。
到目前为止,我制作了这段代码:
import queue
from typing import List, Callable
class SingleNode:
def __init__(self, name : str):
self.name : str = name
self.children : List['SingleNode'] = []
def add(self, *nodes : List['SingleNode']):
for node in nodes:
self.children.append(node)
def is_leaf(self):
if len(self.children) == 0:
return True
return False
def level_order_traversal(self, visit: Callable[['SingleNode'], None]) -> List[List[int]]:
fifo = queue.Queue()
levels = []
fifo.put([root])
while fifo and root:
currNode, nextLevel = [], []
while not fifo.empty():
node = fifo.get()
currNode.append(node)
for child in node.children:
nextLevel.append(child)
fifo.put(nextLevel)
levels.append(currNode)
return levels
def search(self, name : str):
if self.name == name:
print(self.__repr__())
for child in self.children:
child.search(name)
return None
def __str__(self):
return f"{self.name}"
def __repr__(self):
return f"TreeNode({self.name}) : {self.children}"
class NonBinaryTree:
root_node: SingleNode
我的树:
我需要按以下顺序访问节点:1、2、3、4、5、6、7、8,依此类推...
【问题讨论】:
标签: python tree breadth-first-search