Python:二进制搜索树的数组实现

时间:2015-09-12 05:33:16

标签: python oop

我见过很多类型的二叉搜索树的链表实现,我想知道如何在数组中实现一个。这可能吗?如果是这样的话怎么样? 非常感谢!

这是队列的数组实现!

class Queue:

    MAX = 6

    def __init__(self):
        self.queue = [None for x in range(self.MAX)]
        self.front = 0
        self.rear = 0

    def isEmpty(self):
        return self.front == self.rear

    def size(self):
        if self.isEmpty():
            return 0
        elif self.front < self.rear:
            return self.rear - self.front
        else:
            return self.rear + self.MAX - self.front

    def isFull(self):
        return self.size() == self.MAX - 1

    def insert(self, data):
        if self.isFull():
            print("Cannot insert to full queue")
        else:
            self.queue[self.rear] = data
            self.rear = (self.rear + 1) % self.MAX
            return data


    def delete(self):
        if self.isEmpty():
            print("Cannot delete from empty queue")
        else:
            data = self.queue[self.front]
            self.queue[self.front] = None
            self.front = (self.front + 1) % self.MAX
            return data

    def peek(self):
        if self.isEmpty():
            return None
        else:
            return self.queue[self.front]

    def display(self):
        if self.isEmpty():
            print("Empty Queue")
        elif self.front < self.rear:
            for i in range(self.front, self.rear):
                print(self.queue[i], end = ' ')
        else:
            for i in range(self.front, self.MAX):
                print(self.queue[i], end = ' ')
            for j in range(self.rear):
                print(self.queue[j], end = ' ')

2 个答案:

答案 0 :(得分:1)

您的问题有点困惑。队列是一种抽象数据类型,可以以多种方式实现。在数组或列表数据结构中实现它是一种标准实现,如您所见,直截了当。

二进制搜索树已经是一种实现 - 通常是抽象数据类型的实现,如Ordered Map Container抽象数据类型。它取决于(有效地)创建和删除具有到其中其他节点的链接的节点的能力。您通常需要根据您的语言中实现这种创建和删除的基元来编写此实现。限制自己使用数组类型可以排除这些原语。

但是,大多数语言在更原始的层之上实现这些原语,即计算机进程地址空间(其内存)。所以你可以假装数组就像一个内存,并在该数组的顶部实现自己的分配和释放机制。看看典型的内存分配算法,看看我在说什么。

当然,这在实践中并不是一个好主意,但也许你正在将它作为一种学习经验。这当然需要一些学习!

另一个注意事项。您可能正在考虑堆(在Python heapq模块中实现)。堆不是二元搜索树,但它有一些相似之处,值得学习。

答案 1 :(得分:0)

我已经写过BST,但我不知道如何使用&#34; array&#34;或&#34;链接列表&#34;。这是我和其他人通常做的事情:

TreeNode

您将Tree存储在 declare v_REGION_CODE CLOB ; l_clob CLOB; c integer; nr integer; BEGIN DBMS_LOB.CREATETEMPORARY(l_clob,true); EXECUTE IMMEDIATE 'TRUNCATE TABLE SVQ_DI_XLS_COUNTRY_POP_DETAILS'; c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@PPRLEG; DBMS_HS_PASSTHROUGH.PARSE@PPRLEG(c,' SELECT "REGION CODE" FROM TBL_SVQ_DI_XLS_COUNTRY_POP_DETAILS'); LOOP nr := DBMS_HS_PASSTHROUGH.FETCH_ROW@PPRLEG(c); EXIT WHEN nr = 0; DBMS_HS_PASSTHROUGH.GET_VALUE@PPRLEG(c, 1 , v_REGION_CODE ) ; FOR i IN 1..10 LOOP INSERT INTO SVQ_DI_XLS_COUNTRY_POP_DETAILS (REGION_CODE) VALUES (empty_clob()) --Insert an "empty clob" (not insert null) RETURNING REGION_CODE INTO l_clob; FOR i IN 1..100 LOOP dbms_lob.append(l_clob, v_REGION_CODE); --dbms_lob.append(l_clob, 'string chunk to be inserted (maximum 4000 characters at a time)'); END LOOP; END LOOP;`enter code here` END LOOP; DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@PPRLEG(c); COMMIT; END;