簡體   English   中英

二進制搜索樹-查找大小

[英]Binary Search Tree - Finding the size

我想找到具有給定節點的樹的大小,它將像這樣聲明

print bst.get("B")

但是,當我嘗試打印時,它總是說“它只接受1個參數,但給出2個參數”。對不起,有人可以幫幫我,因為我對此很陌生。

簡短的代碼是:

def size(self,key):
    temp = self.root
    if (temp == 0):
        return 0
    return 1 + self.size(temp.left) + self.size(temp.right)

def size2(self,n):
    if n is None:
        return 0
    else:
        return 1 + self.size2(n.left) + self.size2(n.right)

完整代碼:

import os
import pygraphviz as pgv
from collections import deque

class BST:
    root=None

    def put(self, key, val):
        self.root = self.put2(self.root, key, val)

    def put2(self, node, key, val):
        if node is None:
            #key is not in tree, create node and return node to parent
            return Node(key, val)
        if key < node.key:
            # key is in left subtree
            node.left = self.put2(node.left, key, val)
        elif key > node.key:
            # key is in right subtree
            node.right = self.put2(node.right, key, val)
        else:
            node.val = val
       # node.count = 1 + self.size2(node.left) + self.size2(node.right)
        return node

    # draw the graph
    def drawTree(self, filename):
        # create an empty undirected graph
        G=pgv.AGraph('graph myGraph {}')

        # create queue for breadth first search
        q = deque([self.root])
        # breadth first search traversal of the tree
        while len(q) <> 0:
            node = q.popleft()
            G.add_node(node, label=node.key+":"+str(node.val))
            if node.left is not None:
                # draw the left node and edge
                G.add_node(node.left, label=node.left.key+":"+str(node.left.val))
                G.add_edge(node, node.left)
                q.append(node.left)
            if node.right is not None:
                # draw the right node and edge
                G.add_node(node.right, label=node.right.key+":"+str(node.right.val))
                G.add_edge(node, node.right)
                q.append(node.right)

        # render graph into PNG file
        G.draw(filename,prog='dot')
        os.startfile(filename)

    def createTree(self):
        self.put("F",6)
        self.put("D",4)
        self.put("C",3)
        self.put("B",2)
        self.put("A",1)
        self.put("E",5)
        self.put("I",9)           
        self.put("G",7)
        self.put("H",8)            
        self.put("J",10)


    def size(self,key):
        temp = self.root
        if (temp == 0):
            return 0
        return 1 + self.size(temp.left) + self.size(temp.right)

    def size2(self,n):
        if n is None:
            return 0
        else:
            return 1 + self.size2(n.left) + self.size2(n.right)

class Node:
    left = None
    right = None
    key = 0
    val = 0

    def __init__(self, key, val):
        self.key = key
        self.val = val


bst = BST()
bst.createTree()
bst.drawTree("demo.png")
##print bst.size("D")

我的代碼堆棧溢出。 我認為您需要在size方法中使用size2

def size(self,key):
    temp = self.root
    if (temp == 0):
        return 0
    return 1 + self.size2(temp.left) + self.size2(temp.right)

就個人而言,我可能不會將其稱為size2方法,但這只是一個口味(和風格)問題。 還有, key好像沒用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM