在python中计算General树中的节点

时间:2015-01-28 06:11:20

标签: python tree

我创建了一个树结构,它不是二叉树,并且难以获得正确的节点数。

class TreeNode(object):
  def __init__(self, name='root', children=None,Parent=[]):
    self.Name = name
    self.Parents=Parent

    self.Children = []
    if children is not None:
        for child in children:
            self.add_child(child.Name)

 def __repr__(self):
   return self.Name

 def add_child(self, node):    
  self.Children.append(node)

这是我为了计算树中节点数而尝试做的最新事情。

def countNodes(Tree):      

   for Child in Tree.Children:
      return countNodes(Child)+1

   return 1

有人可以解释为什么这不起作用吗? 编辑:我应该澄清,当我说没有工作时,它给我一个完全错误的计数,我的图中的节点数。

2 个答案:

答案 0 :(得分:1)

countNodes功能不好。父节点可以有两个子节点,如果在return循环中放置for语句,它将在第一个子节点上返回,并且第二个子节点将丢失。你需要做这样的事情:

def countNodes(Tree):      
   count = 1
   for Child in Tree.Children:
      count +=  countNodes(Child)
   return count

答案 1 :(得分:0)

仅添加@levi错过了root为None的边缘情况

所以修改后的代码将是:

def numNodes(root):
    if root == None:
        return 0 
    node = 1
    for child in root.children:
        node = node + numNodes(child)
    return node