標籤:二叉樹 python 資料結構 遍曆 二分尋找
借維基百科的話來說就是二叉樹就是一種每個節點最多有兩個子樹的樹結構。但是今天討論的是二叉尋找樹,這個尋找樹就是二叉樹的一種延伸吧,加了幾條限制就變成了二叉尋找樹。
下面我們來看看二叉尋找樹有什麼性質呢,如果左子樹不為空白,那麼一定全部小於等於根節點,同樣右子樹也是一樣的,而且左右子樹都是二叉尋找樹。最後樹中沒有鍵值相同的節點。如果滿足上述四條性質的二叉樹就是二叉尋找樹。下面我們來一張二叉尋找樹的圖片吧,現在不是都講究有圖有真相嗎。
我們還是得從頭開始,因為它二叉樹是一種資料結構,那麼就一定有定義,我們來看一下它是怎麼定義的呢,其實就是資料、左子樹、右子樹。它就是一個類,如果你想建立一個節點root = Node(8),像這樣你就建立了一個根節點。
class Node: """ 二叉樹左右枝 """ def __init__(self, data): """ 節點結構 """ self.left = None self.right = None self.data = data
現在節點的定義已經ok了,那我們來看一下插入函數吧,insert。其實插入函數裡就是二分的思想,因為二叉尋找樹的性質,我們可以使用二分的方法來尋找插入的位置。裡面還有遞迴的意思,大概意思就是不到葉子節點就一直往下找,找到合數的就將其data的值插入相應的節點中。
def insert(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)
我們可以繼續構造我們的小樹啊,繼續插入幾個節點來完善這個小小樹。
root.insert(3)root.insert(10)root.insert(1)
我們可以來類比一下插入的過程啊,插入3時和8比較小於8且8的左節點為空白,所以插入到8的左節點上。插入10的時候呢就直接插到8的右節點上了,插入1的時候先和8比較小於8,且8的左子樹不為空白,遞迴調用8的左子樹,之後和3比較,比3小且3的左子樹為空白,插入到3的左節點。
root.insert(6)root.insert(4)root.insert(7)root.insert(14)root.insert(13)
又到點了,小夥伴們該睡覺了,那麼明天再寫遍曆神馬的吧。
二叉樹尋找之python實現--(插入)