我有一个nTree(n维),我想计算包含特定深度数据点的节点数。这是树结构和我尝试使用的功能:
<c:forEach items="${simpleList}" var="rez">
<jsp:useBean scope="request" id="rez" class="SomeHistory"/>
<div class="detail" style="page-break-inside: avoid">
我知道我的方法效率有点但我希望它首先工作,然后我可以优化它。我已经阅读了关于这个问题的不同帖子,我的方法与其他帖子非常相似,但它对nTree不起作用。就我而言,我有64个孩子/父母。另外,我不确定PreOrder,PostOrder,InOrder或BreadthFirst遍历是否有效,因为我无法引用左子或右子子。有关改进/使该方法有效的建议吗?
答案 0 :(得分:0)
问题已解决。对于任何寻求解决方案的人来说,方法是:
#countNodesAtLevel - returns the number of non-empty nodes at a given level
#Parameters:
# depth - depth at which we are counting
def _countNodesAtLevel(self, depth, count=0):
#root level = 0, return only 1 for the data
if depth == 0 and self.data:
return 1
else:
for child in self.children:
if child.depth == depth and child.data:
count+=1
count+=child.countNodesAtLevel(depth)
else:
count+=child.countNodesAtLevel(depth)
return count
#USER FUNCTION
#countNodesAtLevel - returns the number of non-empty nodes at a given level
def countNodesAtLevel(self, depth):
count = self._countNodesAtLevel(depth)
print(count)
此方法使用深度优先遍历模型,因此它会检查树中的每个节点。我确信有更好的方法可以在低于O(n)的情况下完成此任务。