【问题标题】:Count number of nodes in binary tree with leaves用叶子计算二叉树中的节点数
【发布时间】:2016-03-28 15:02:37
【问题描述】:

主类树

class Tree:
    def __init__(self, root, size):
        self.root = None
        self.size = 0

    def count_nodes(self):
        if self.value is None:
            return -1
        else:
        return 1 + self.count_nodes(self.left) + self.count_nodes(self.right)

            #self.size += 1
            #if self.left is not None:
                #self.left.count_nodes()
            #if self.right is not None:
                #self.right.count_nodes()
            #return self.size

带有子类 Node 和 Leaf

class Node (Tree):
    def __init__(self, value, left, right):
        self.left = left
        self.right = right
        self.value = value

class Leaf (Tree):
    def __init__(self, value):
        self.value = value

遇到叶子怎么办?以上2种方法都试过了,遇到leaf还是不知道怎么处理。

示例树如下,tree.count-nodes()应该返回 7

tree = Node ("one",
             Node ("two", Leaf ("three"), Leaf ("four")),
             Node ("five", Leaf ("six"), Leaf ("seven")))

【问题讨论】:

  • 为什么需要Leaf 类?叶子只是 NodeNone 子代。

标签: python algorithm binary-tree


【解决方案1】:

您的方法是正确的 - 二叉树中的节点数等于 1(根节点) + nodes_in_left_subtree(如果存在) + nodes_in_right_subtree (如果存在)。这是递归定义,可以按照您的尝试实现为递归函数。

在你的实现中你有一些缺陷:

  • 您没有检查子树是否确实存在
  • self.leftself.right 实际上是 Tree 并且您应该在这些 Trees 上调用 call_nodes 而不是在 self

附:您的代码在语法上不正确。检查self.value is None 对我来说很奇怪,但对于您的问题域可能是正确的。 root 变量从不使用。您可以考虑当前数据组织是否真的需要它。

【讨论】:

    【解决方案2】:

    不需要另一个子类来计算叶子。您可以像这样计算所有节点:

    class Tree:
        def __init__(self, root, size):
            self.root = None
            self.size = 0
    
        def count_nodes(self,root):
            if (root.right is None and root.left is None) :
                return -1
            else:
            return 1 + self.count_nodes(self.left) + self.count_nodes(self.right)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-12
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-17
      • 1970-01-01
      • 2017-04-28
      相关资源
      最近更新 更多