繁体   English   中英

在Python中对二进制搜索树中的节点进行计数

[英]Counting the nodes in a Binary Search Tree in Python

我是编程的新手,我想了解一些二进制搜索树。 我想创建一个函数来递归地计算树中的节点数,但是,当我运行函数时,它似乎不起作用,并且始终返回“ none”,好像树中什么都没有。 有人可以帮我在这里找到问题吗?

这是我的TreeNode类:

class TreeNode(object):

    def __init__(self, data = None, left=None, right=None):
        self.item = data
        self.left = left
        self.right = right

    def __str__(self):
        return str(self.item)

这是我的主要功能,我将其中的大部分功能精简了一下,以便我们可以参考节点计数来解决这个问题。

from TreeNode import TreeNode


class BST(object):

    #------------------------------------------------------------

    def __init__(self):

        """create empty binary search tree
        post: empty tree created"""

        self.root = None

def treeSize(self, root, size = 0):

        if root is None:
            return -1

        if root is not None:
            size += 1
            if root.left is not None:
                self.treeSize(root.left, size)
            if root.right is not None:
                self.treeSize(root.right, size)

这是我用来测试我的功能的代码:

from BinarySearchTree import BST
from TreeNode import TreeNode

tree = TreeNode(4, TreeNode(2, TreeNode(1), TreeNode(3)), TreeNode (7, TreeNode(6),TreeNode(8)))

a = BST()

print(a.postOrder(tree))
print(a.treeSize(tree))

当我调用'print(a.treeSize(tree))'时,它只返回'none'而不是'7'。

您也可以使用旧的递归方法:

def treeSize(self, root):

    if root is None:
        return 0

    if root is not None:
        return 1 + self.treeSize(root.left) + self.treeSize(root.right)

乔纳森的回答也很好。

我懂了。 您认为大小将在调用的函数中得到更新。 它不是每个函数的本地函数。 您可以对此进行global调用,但这不是最佳选择。

您可以将其设置为成员变量(实际上不这样做):

def __init__(self):
   ...
   self.size = 0

def treeSize(self,...):
   ...
   self.size += 1
   ...
   return self.size

但是明显的错误是self.size每次调用treeSize都会翻倍。 您也可以解决此问题,但让我们使用我们知道和喜欢的模式。 像VHarisop所写的那样,以一种很好的旧的递归方式进行操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM