簡體   English   中英

Python:二進制搜索樹的數組實現

[英]Python: Array Implementation of a Binary Search Tree

我已經看到了二進制搜索樹的許多鏈接列表實現,並且我想知道如何在數組中實現一個。 這可能嗎? 如果是這樣的話,會是什么樣? 非常感謝!

這是隊列的數組實現!

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 = ' ')

您的問題有點困惑。 隊列是一種抽象數據類型,可以通過多種方式實現。 如您所見,在數組或列表數據結構中實現它是一種標准實現,並且非常簡單。

二進制搜索樹已經是一種實現-通常是抽象數據類型(如“有序地圖容器”抽象數據類型)的實現。 這取決於(有效)創建和刪除具有指向其他節點鏈接的節點的能力。 通常,您需要使用實現此類創建和刪除操作的語言中的原語對這種實現進行編碼。 將自己限制為數組類型可以排除這些原語。

但是,大多數語言在更原始的層(您的計算機進程地址空間(它的內存))上實現這些原始。 因此,您可以假裝該數組就像一個內存,並在該數組的頂部實現自己的分配和釋放機制。 看一下典型的內存分配算法,看看我在說什么。

當然,這在實踐中不是一個好主意,但也許您是作為學習經驗來做的。 當然,這需要學習!

另一注。 您可能正在考慮堆(在Python heapq模塊中實現)。 堆不是二叉搜索樹,但具有一些相似之處,值得學習。

我已經編寫了BST,但是我不知道如何使用“數組”或“鏈接列表”來實現。 這是我和其他人通常的工作:

class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left = self.right = None

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

    def add_node(self, val):
        # traversing the tree by comparing val with existing node value
        ...

    def remove_node(self, val):
        # whatever...

您將TreeNode存儲在Tree

暫無
暫無

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

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