最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python學(xué)習(xí)之二叉樹實(shí)現(xiàn)的示例詳解

 更新時(shí)間:2023年04月10日 15:14:03   作者:逃逸的卡路里  
這篇文章主要為大家詳細(xì)介紹了Python實(shí)現(xiàn)二叉樹的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解一下

Python實(shí)現(xiàn)二叉樹

Python實(shí)現(xiàn)二叉樹可以使用面向?qū)ο缶幊痰姆绞剑ㄟ^定義二叉樹節(jié)點(diǎn)類來實(shí)現(xiàn)。每個(gè)節(jié)點(diǎn)包含一個(gè)數(shù)據(jù)元素、左右子節(jié)點(diǎn)指針和一些操作方法,如插入節(jié)點(diǎn)、查找節(jié)點(diǎn)、刪除節(jié)點(diǎn)等。

以下是一個(gè)簡(jiǎn)單的二叉樹實(shí)現(xiàn)示例:

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

    def insert(self, data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

    def find(self, data):
        if data < self.data:
            if self.left is None:
                return str(data) + " Not Found"
            return self.left.find(data)
        elif data > self.data:
            if self.right is None:
                return str(data) + " Not Found"
            return self.right.find(data)
        else:
            return str(self.data) + " is found"

    def inorder_traversal(self, root):
        res = []
        if root:
            res = self.inorder_traversal(root.left)
            res.append(root.data)
            res = res + self.inorder_traversal(root.right)
        return res

在上述代碼中,Node類定義了一個(gè)節(jié)點(diǎn),包含數(shù)據(jù)元素data,以及左右子節(jié)點(diǎn)指針left和right。insert方法用于向二叉樹中插入節(jié)點(diǎn),find方法用于查找二叉樹中是否存在特定節(jié)點(diǎn),inorder_traversal方法用于對(duì)二叉樹進(jìn)行中序遍歷。

下面是如何使用這個(gè)Node類來創(chuàng)建一個(gè)二叉樹:

root = Node(50)
root.insert(30)
root.insert(20)
root.insert(40)
root.insert(70)
root.insert(60)
root.insert(80)

# 查找節(jié)點(diǎn)

print(root.find(70)) # Output: 70 is found
print(root.find(90)) # Output: 90 Not Found

# 中序遍歷
print(root.inorder_traversal(root)) # Output: [20, 30, 40, 50, 60, 70, 80]

在上述代碼中,首先創(chuàng)建了一個(gè)根節(jié)點(diǎn)root,然后使用insert方法向樹中插入節(jié)點(diǎn),最后使用find方法查找節(jié)點(diǎn)并使用inorder_traversal方法對(duì)二叉樹進(jìn)行中序遍歷。

除了插入、查找和遍歷方法,二叉樹還有其他的操作方法,如刪除節(jié)點(diǎn)、判斷是否為二叉搜索樹、計(jì)算樹的深度等。下面是一個(gè)稍微完整一些的二叉樹示例代碼:

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

    def insert(self, data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

    def find(self, data):
        if data < self.data:
            if self.left is None:
                return None
            return self.left.find(data)
        elif data > self.data:
            if self.right is None:
                return None
            return self.right.find(data)
        else:
            return self

    def delete(self, data):
        if self is None:
            return self

        if data < self.data:
            self.left = self.left.delete(data)
        elif data > self.data:
            self.right = self.right.delete(data)
        else:
            if self.left is None:
                temp = self.right
                self = None
                return temp
            elif self.right is None:
                temp = self.left
                self = None
                return temp
            temp = self.right.minimum()
            self.data = temp.data
            self.right = self.right.delete(temp.data)
        return self

    def minimum(self):
        if self.left is None:
            return self
        return self.left.minimum()

    def is_bst(self):
        if self.left:
            if self.left.data > self.data or not self.left.is_bst():
                return False

        if self.right:
            if self.right.data < self.data or not self.right.is_bst():
                return False

        return True

    def height(self, node):
        if node is None:
            return 0

        left_height = self.height(node.left)
        right_height = self.height(node.right)

        return max(left_height, right_height) + 1

    def inorder_traversal(self, root):
        res = []
        if root:
            res = self.inorder_traversal(root.left)
            res.append(root.data)
            res = res + self.inorder_traversal(root.right)
        return res

在這個(gè)示例中,我們新增了delete方法來刪除指定的節(jié)點(diǎn);minimum方法來查找樹中的最小節(jié)點(diǎn);is_bst方法來判斷當(dāng)前樹是否為二叉搜索樹;height方法來計(jì)算樹的深度。

我們可以用以下代碼來測(cè)試新增的方法:

# 創(chuàng)建二叉樹
root = Node(50)
root.insert(30)
root.insert(20)
root.insert(40)
root.insert(70)
root.insert(60)
root.insert(80)

# 刪除節(jié)點(diǎn)
print("Deleting node 20:")
root.delete(20)
print(root.inorder_traversal(root))

# 判斷是否為二叉搜索樹
print("Is it a BST?:", root.is_bst())

# 計(jì)算樹的深度
print("Tree height:", root.height(root))

這樣我們就完成了一個(gè)比較完整的二叉樹的實(shí)現(xiàn),同時(shí)也演示了如何在Python中使用面向?qū)ο缶幊趟枷雭韺?shí)現(xiàn)一個(gè)數(shù)據(jù)結(jié)構(gòu)。

最后附上完整的二叉樹類實(shí)現(xiàn)代碼:

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

    def insert(self, data):
        if self.data:
            if data < self.data:
                if self.left is None:
                    self.left = Node(data)
                else:
                    self.left.insert(data)
            elif data > self.data:
                if self.right is None:
                    self.right = Node(data)
                else:
                    self.right.insert(data)
        else:
            self.data = data

    def find(self, data):
        if data < self.data:
            if self.left is None:
                return None
            return self.left.find(data)
        elif data > self.data:
            if self.right is None:
                return None
            return self.right.find(data)
        else:
            return self

    def delete(self, data):
        if self is None:
            return self

        if data < self.data:
            self.left = self.left.delete(data)
        elif data > self.data:
            self.right = self.right.delete(data)
        else:
            if self.left is None:
                temp = self.right
                self = None
                return temp
            elif self.right is None:
                temp = self.left
                self = None
                return temp
            temp = self.right.minimum()
            self.data = temp.data
            self.right = self.right.delete(temp.data)
        return self

    def minimum(self):
        if self.left is None:
            return self
        return self.left.minimum()

    def is_bst(self):
        if self.left:
            if self.left.data > self.data or not self.left.is_bst():
                return False

        if self.right:
            if self.right.data < self.data or not self.right.is_bst():
                return False

        return True

    def height(self, node):
        if node is None:
            return 0

        left_height = self.height(node.left)
        right_height = self.height(node.right)

        return max(left_height, right_height) + 1

    def inorder_traversal(self, root):
        res = []
        if root:
            res = self.inorder_traversal(root.left)
            res.append(root.data)
            res = res + self.inorder_traversal(root.right)
        return res

if __name__ == '__main__':
    # 創(chuàng)建二叉樹
    root = Node(50)
    root.insert(30)
    root.insert(20)
    root.insert(40)
    root.insert(70)
    root.insert(60)
    root.insert(80)

    # 刪除節(jié)點(diǎn)
    print("Deleting node 20:")
    root.delete(20)
    print(root.inorder_traversal(root))

    # 判斷是否為二叉搜索樹
    print("Is it a BST?:", root.is_bst())

    # 計(jì)算樹的深度
    print("Tree height:", root.height(root))

運(yùn)行代碼后,可以得到以下輸出:

Deleting node 20:
[30, 40, 50, 60, 70, 80]
Is it a BST?: True
Tree height: 3

這個(gè)示例包含了插入、查找、刪除、遍歷、判斷是否為二叉搜索樹和計(jì)算樹的深度等。希望對(duì)看到的小伙伴有幫助。

到此這篇關(guān)于Python學(xué)習(xí)之二叉樹實(shí)現(xiàn)的示例詳解的文章就介紹到這了,更多相關(guān)Python二叉樹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 如何徹底解決Python中matplotlib不顯示中文的問題詳解(顯示方框)

    如何徹底解決Python中matplotlib不顯示中文的問題詳解(顯示方框)

    Matplotlib繪制圖像顯示中文的時(shí)候,中文會(huì)變成小方格子,下面這篇文章主要給大家介紹了關(guān)于如何徹底解決Python中matplotlib不顯示中文問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • python3 批量獲取對(duì)應(yīng)端口服務(wù)的實(shí)例

    python3 批量獲取對(duì)應(yīng)端口服務(wù)的實(shí)例

    今天小編就為大家分享一篇python3 批量獲取對(duì)應(yīng)端口服務(wù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • 使用Python實(shí)現(xiàn)在Word文檔中進(jìn)行郵件合并

    使用Python實(shí)現(xiàn)在Word文檔中進(jìn)行郵件合并

    郵件合并是現(xiàn)代辦公中一項(xiàng)顯著提升效率的技術(shù),它巧妙地將大量個(gè)體數(shù)據(jù)與預(yù)設(shè)的文檔模板相結(jié)合,實(shí)現(xiàn)了一次性批量生成定制化文檔,下面我們就來看看如何使用Python實(shí)現(xiàn)在Word文檔中進(jìn)行郵件合并吧
    2024-04-04
  • Python3中urllib庫(kù)添加請(qǐng)求頭的兩種方式

    Python3中urllib庫(kù)添加請(qǐng)求頭的兩種方式

    Python?3中的urllib模塊可以用來處理URL,包括下載和上傳文件、創(chuàng)建和讀取cookie、訪問Web?API等,本文給大家介紹Python3中urllib庫(kù)添加請(qǐng)求頭的兩種方式,感興趣的朋友一起看看吧
    2023-10-10
  • Python+Tkinter打造簽名設(shè)計(jì)工具

    Python+Tkinter打造簽名設(shè)計(jì)工具

    這篇文章主要為大家分享如何利用Python Tkinter庫(kù)制作帶圖形界面的一個(gè)簽名設(shè)計(jì)工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-04-04
  • 對(duì)python過濾器和lambda函數(shù)的用法詳解

    對(duì)python過濾器和lambda函數(shù)的用法詳解

    今天小編就為大家分享一篇對(duì)python過濾器和lambda函數(shù)的用法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-01-01
  • 詳解如何利用Python代碼刪除Word文檔空白行

    詳解如何利用Python代碼刪除Word文檔空白行

    Word文檔內(nèi)容的整潔性與易讀性是體現(xiàn)文檔水平的關(guān)鍵因素之一,許多錯(cuò)誤或不合理的內(nèi)容,如多余的空白行,Python為批量刪除Word文檔空白行以及對(duì)這一過程的自動(dòng)化處理提供了強(qiáng)有力的支持,本文將介紹如何利用Python自動(dòng)化刪除Word文檔中的空白行,需要的朋友可以參考下
    2024-05-05
  • 在Python3.74+PyCharm2020.1 x64中安裝使用Kivy的詳細(xì)教程

    在Python3.74+PyCharm2020.1 x64中安裝使用Kivy的詳細(xì)教程

    這篇文章主要介紹了在Python3.74+PyCharm2020.1 x64中安裝使用Kivy的詳細(xì)教程,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 四行Python3代碼實(shí)現(xiàn)圖片添加美顏效果

    四行Python3代碼實(shí)現(xiàn)圖片添加美顏效果

    這篇文章主要為大家介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)給圖片添加美顏效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下
    2022-04-04
  • Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    Python+selenium實(shí)現(xiàn)瀏覽器基本操作詳解

    這篇文章主要為大家詳細(xì)介紹了如何通過python腳本實(shí)現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進(jìn)后退、頁(yè)面刷新等,感興趣的可以學(xué)習(xí)一下
    2022-06-06

最新評(píng)論

华容县| 莱芜市| 象山县| 乌兰浩特市| 苍山县| 北碚区| 辽阳市| 土默特左旗| 高青县| 东辽县| 花垣县| 平乐县| 武城县| 东山县| 犍为县| 正阳县| 汤原县| 西城区| 张家川| 彰化市| 永胜县| 枣庄市| 苗栗县| 内乡县| 寻甸| 马山县| 邹平县| 陵川县| 绵阳市| 方正县| 昂仁县| 岳阳市| 南投市| 胶州市| 深水埗区| 炉霍县| 肥乡县| 利川市| 张家界市| 博兴县| 栾城县|