複習 二叉樹的建立

2022-06-19 12:21:12 字數 1724 閱讀 5037

1

'''2樹:3

每乙個結點都有零個或多個子結點

4沒有父節點的節點稱為根節點

5每乙個非根結點有且只有乙個父結點

6除了根結點外,每乙個子節點可以分為多個不相交的子樹

7二叉樹性質:

8在二叉樹的第 i 層 最多有 2^(i-1) 個結點

9深度為 k 的二叉樹最多有 2^k - 1 個結點

10葉子結點數為 n0 度數為 2 的結點數為 n2

11n0 = n2 + 1

12具有 n 個結點的完全二叉樹的深度為 log2(n+1)

13完全二叉樹:

14編號為 i 的結點

15左孩子 -> 2i

16右孩子 -> 2i + 1

17左孩子 的 父結點 編號必為 i/2

1819

'''20

class

node(object):

21'''

定義乙個結點,有左孩子和右孩子

'''22

def__init__

(self,data):23#

結點資料

24 self.data =data25#

左、右 孩子指向為空

26 self.lchild =none

27 self.rchild =none

2829

class

binarytree(object):

30'''

定義二叉樹

'''31

def__init__

(self):32#

根結點預設為空

33 self.root =none

3435

defadd(self,data):36#

新增資料到二叉樹中 向最後進行新增資料37#

處理順序:父結點 左孩子 右孩子

38 node =node(data)39#

如果為空樹

40if self.root is

none:

41 self.root =node42#

空樹,加入資料則放在根節點處

43return

44 queue =[self.root]45#

新增根節點,作為存在該結點的標誌

46while

queue:47#

如果 queue 不為空

48 cur_node =queue.pop(0)49#

當前結點指向根節點,取第乙個元素

50if cur_node.lchild is

none :51#

如果左結點為空

52 cur_node.lchild =node

53return

54else:55

#新增到指標內,證明存在左結點

5657

if cur_node.rchild is

none:58#

如果右結點為空

59 cur_node.rchild =node

60return

61else:62

#新增到指標內,證明存在右結點

2020-04-17

複習 二叉樹 樹

樹是一種很常用的資料結構,日後的學習中會經常碰到運用樹的知識。構造二叉樹 include include include using namespace std 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹 1 若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值 2 若右子樹不空...

建立二叉樹 後序建立二叉樹

由後序遍歷可知,輸入順序是左結點 右結點 子樹根結點 比如輸入如下樹 ab cde 輸入序列為 e d b c a 思路 使用棧,對左結點和右結點進行壓棧 1.當輸入遇到非 且棧中元素大於等於2,則可以確定乙個小三角樹形,並將這個樹根作為下乙個小三角樹形的乙個子節點 2.當輸入遇到非 但棧中元素小於...

複習二叉樹之線索二叉樹

include 線索二叉樹是在遍歷的過程中線索化 typedef struct bithrnodebithrnode,bithrtree bithrtree pre 全域性變數 建立二叉鍊錶 先序遍歷建立 關鍵在於 表明空樹 void createbitree bithrtree a else 為什...