我创建了一个树结构,它不是二叉树,并且难以获得正确的节点数。
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
有人可以解释为什么这不起作用吗? 编辑:我应该澄清,当我说没有工作时,它给我一个完全错误的计数,我的图中的节点数。
答案 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