Python學習之二叉樹實現(xiàn)的示例詳解
Python實現(xiàn)二叉樹

Python實現(xiàn)二叉樹可以使用面向對象編程的方式,通過定義二叉樹節(jié)點類來實現(xiàn)。每個節(jié)點包含一個數(shù)據元素、左右子節(jié)點指針和一些操作方法,如插入節(jié)點、查找節(jié)點、刪除節(jié)點等。
以下是一個簡單的二叉樹實現(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類定義了一個節(jié)點,包含數(shù)據元素data,以及左右子節(jié)點指針left和right。insert方法用于向二叉樹中插入節(jié)點,find方法用于查找二叉樹中是否存在特定節(jié)點,inorder_traversal方法用于對二叉樹進行中序遍歷。
下面是如何使用這個Node類來創(chuàng)建一個二叉樹:
root = Node(50) root.insert(30) root.insert(20) root.insert(40) root.insert(70) root.insert(60) root.insert(80) # 查找節(jié)點 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)建了一個根節(jié)點root,然后使用insert方法向樹中插入節(jié)點,最后使用find方法查找節(jié)點并使用inorder_traversal方法對二叉樹進行中序遍歷。
除了插入、查找和遍歷方法,二叉樹還有其他的操作方法,如刪除節(jié)點、判斷是否為二叉搜索樹、計算樹的深度等。下面是一個稍微完整一些的二叉樹示例代碼:
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
在這個示例中,我們新增了delete方法來刪除指定的節(jié)點;minimum方法來查找樹中的最小節(jié)點;is_bst方法來判斷當前樹是否為二叉搜索樹;height方法來計算樹的深度。
我們可以用以下代碼來測試新增的方法:
# 創(chuàng)建二叉樹
root = Node(50)
root.insert(30)
root.insert(20)
root.insert(40)
root.insert(70)
root.insert(60)
root.insert(80)
# 刪除節(jié)點
print("Deleting node 20:")
root.delete(20)
print(root.inorder_traversal(root))
# 判斷是否為二叉搜索樹
print("Is it a BST?:", root.is_bst())
# 計算樹的深度
print("Tree height:", root.height(root))
這樣我們就完成了一個比較完整的二叉樹的實現(xiàn),同時也演示了如何在Python中使用面向對象編程思想來實現(xià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 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é)點
print("Deleting node 20:")
root.delete(20)
print(root.inorder_traversal(root))
# 判斷是否為二叉搜索樹
print("Is it a BST?:", root.is_bst())
# 計算樹的深度
print("Tree height:", root.height(root))
運行代碼后,可以得到以下輸出:
Deleting node 20:
[30, 40, 50, 60, 70, 80]
Is it a BST?: True
Tree height: 3
這個示例包含了插入、查找、刪除、遍歷、判斷是否為二叉搜索樹和計算樹的深度等。希望對看到的小伙伴有幫助。
到此這篇關于Python學習之二叉樹實現(xiàn)的示例詳解的文章就介紹到這了,更多相關Python二叉樹內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
如何徹底解決Python中matplotlib不顯示中文的問題詳解(顯示方框)
Matplotlib繪制圖像顯示中文的時候,中文會變成小方格子,下面這篇文章主要給大家介紹了關于如何徹底解決Python中matplotlib不顯示中文問題的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-04-04
使用Python實現(xiàn)在Word文檔中進行郵件合并
郵件合并是現(xiàn)代辦公中一項顯著提升效率的技術,它巧妙地將大量個體數(shù)據與預設的文檔模板相結合,實現(xiàn)了一次性批量生成定制化文檔,下面我們就來看看如何使用Python實現(xiàn)在Word文檔中進行郵件合并吧2024-04-04
在Python3.74+PyCharm2020.1 x64中安裝使用Kivy的詳細教程
這篇文章主要介紹了在Python3.74+PyCharm2020.1 x64中安裝使用Kivy的詳細教程,本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08
Python+selenium實現(xiàn)瀏覽器基本操作詳解
這篇文章主要為大家詳細介紹了如何通過python腳本實現(xiàn)瀏覽器的一些基本操作,如:瀏覽器的前進后退、頁面刷新等,感興趣的可以學習一下2022-06-06

