演算法筆記 二叉樹,二叉搜尋樹筆記(python)

2021-10-05 14:28:49 字數 2187 閱讀 2580

二叉樹筆記

1.基本概念

(1)根節點

(2)葉節點

2.樹、圖、鍊錶之間的關係

(1)鍊錶是特殊化的樹,例如一棵樹只有左子節點,而沒有右子節點;或者一棵樹只有右子節點,而沒有左子節點。如下圖。

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定義

#前序遍歷

defpreorder

(self,root)

:if root:

self.preorder(root.left)

self.preorder(root.right)

#中序遍歷

definorder

(self,root)

:if root:

self.inorder(root.left)

self.inorder(root.right)

#後序遍歷

defpostorder

(self,root)

:if root:

self.postorder(root.left)

self.postorder(root.right)

注:樹的操作離不開遞迴,所以千萬不要害怕遞迴,要擁抱遞迴!!6.二叉搜尋樹 binary search tree二叉搜尋樹,也成有序二叉樹(ordered binary tree),排序二叉樹(sorted binary tree),是指一顆孔數或者具有下列性質的二叉樹:

(1)左子樹上所有節點的值均小於它的根節點的值;

(2)右子樹上所有節點的值均大於它的根節點的值;

(3)以此類推,左、右子樹也分別為二叉查詢樹。(這就是重複性!!

7.二叉查詢樹的操作

(1)查詢:類似於二分查詢

(2)插入:新建子節點

(3)刪除

上述三種操作,最值得說一下的是刪除操作:

①刪除的節點是最末端的葉節點,那麼直接刪除即可,不會對數產生太大的影響。

②刪除的節點下面還有子節點:

此時刪除該節點會對於輸的整體結構產生變化,需要在這個節點下面找到乙個節點去代替當前節點,通常情況下是尋找該節點的右子樹下的最小節點代替。

具體事例如下圖,要刪除值為65 的節點:

8.二叉搜尋樹的操作複雜度分析

由上圖可見,二叉搜尋樹的操作複雜度一般為o(log(n)),在最壞的情況下(即退化為鍊錶的情況下),其操作的複雜度將退化為o(n)。

二叉樹 還原二叉樹 二叉搜尋樹

先序遍歷的特點 先遍歷根結點,再遍歷左子樹,最後再遍歷右子樹 中序遍歷的特點 先遍歷左子樹,再遍歷根結點,最後再遍歷右子樹 後序遍歷的特點 先遍歷左子樹,再遍歷右子樹,最後再遍歷根結點 舉例 先序遍歷 a b d f g h i e c 中序遍歷 f d h g i b e a c 如上,根據先序遍...

樹 二叉樹 二叉搜尋樹

給定乙個二叉樹,判斷其是否是乙個有效的二叉搜尋樹。假設乙個二叉搜尋樹具有如下特徵 節點的左子樹只包含小於當前節點的數。節點的右子樹只包含大於當前節點的數。所有左子樹和右子樹自身必須也是二叉搜尋樹。示例 1 輸入 2 13輸出 true 示例 2 輸入 5 14 3 6輸出 false 解釋 輸入為 ...

排序二叉樹or搜尋二叉樹or查詢二叉樹

排序二叉樹,搜尋二叉樹,查詢二叉樹都是乙個意思,只是叫法不同而已。下面的文章中我們統稱為排序二叉樹。本文主要是針對高中資訊學,因此其中不涉及到指標,所有需要用指標的地方都直接使用陣列進行模擬。排序二叉樹定義 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空,則右子...