算法筆記:二叉樹,二叉搜索樹筆記(python)

二叉樹筆記
1.基本概念
(1)根節點
(2)葉節點
在這裏插入圖片描述如圖,即爲一個完整的樹模型。

2.樹、圖、鏈表之間的關係
(1)鏈表是特殊化的樹,例如一棵樹只有左子節點,而沒有右子節點;或者一棵樹只有右子節點,而沒有左子節點。如下圖。
在這裏插入圖片描述(2)樹是特殊的圖,因爲樹是沒有環狀結構,如果樹具有環狀結構,則變成圖。

3.二叉樹,Python定義

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

4.二叉樹的遍歷(前中後序遍歷)
(1)前序(Pre-order):根——左——右
(2)中序(In-order):左——根——右
(3)後續(Post-order):左——右——根

5.二叉樹遍歷,Python定義

#前序遍歷
def preorder(self,root): 
    if root:
	self.traverse_path.append(root.val)
	self.preorder(root.left)
	self.preorder(root.right)
#中序遍歷
def inorder(self,root):
    if root:
        self.inorder(root.left)
        self.traverse_path.append(root.val)
        self.inorder(root.right)
#後序遍歷
def postorder(self,root):
    if root:
    self.postorder(root.left)
    self.postorder(root.right)
    self.traverse_path.append(root.val)

注:樹的操作離不開遞歸,所以千萬不要害怕遞歸,要擁抱遞歸!!

6.二叉搜索樹 Binary Search Tree
二叉搜索樹,也成有序二叉樹(Ordered Binary Tree),排序二叉樹(Sorted Binary Tree),是指一顆孔數或者具有下列性質的二叉樹:
(1)左子樹上所有節點的值均小於它的根節點的值;
(2)右子樹上所有節點的值均大於它的根節點的值;
(3)以此類推,左、右子樹也分別爲二叉查找樹。(這就是重複性!!

7.二叉查找樹的操作
(1)查找:類似於二分查找
(2)插入:新建子節點
(3)刪除
上述三種操作,最值得說一下的是刪除操作:
①刪除的節點是最末端的葉節點,那麼直接刪除即可,不會對數產生太大的影響。
②刪除的節點下面還有子節點:
此時刪除該節點會對於輸的整體結構產生變化,需要在這個節點下面找到一個節點去代替當前節點,通常情況下是尋找該節點的右子樹下的最小節點代替。
具體事例如下圖,要刪除值爲65 的節點:
在這裏插入圖片描述
在這裏插入圖片描述
8.二叉搜索樹的操作複雜度分析
在這裏插入圖片描述
由上圖可見,二叉搜索樹的操作複雜度一般爲O(log(n)),在最壞的情況下(即退化爲鏈表的情況下),其操作的複雜度將退化爲O(n)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章