计算包含特定级别数据的节点数 - nTree

时间:2016-06-24 14:00:03

标签: python data-structures tree tree-traversal

我有一个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遍历是否有效,因为我无法引用左子或右子子。有关改进/使该方法有效的建议吗?

1 个答案:

答案 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)的情况下完成此任务。