資料結構 二叉樹(Python實現)

2021-08-06 04:38:02 字數 3289 閱讀 7638

(1)特點

a.不為空

b. 子樹不分次序

c. 至少有1個根結點

d. 乙個結點可以有多個子樹

(2)樹的度

結點的度:乙個結點擁有的子樹個數

樹的(橫向):樹中結點最大的度

(3)樹的高度

樹的高度(縱向):樹的層數

(4)性質

a. 高度為h的樹最多有2h-1個結點(滿二叉樹)

(1)特點

a. 可以為

b. 子樹分『左右子樹

c. 乙個結點最多2個子樹

(2)性質

a. 二叉樹的第i層最多有2i-1個結點

b. 包含n個結點的二叉樹,高度至少為[log2(n+1)](此處的[x]表示不小於x的最小整數)

c. 任意一顆二叉樹,若a個葉子結點,有b個度為2的結點,則:a=b+1

d.滿二叉樹:高度為h,有2h-1個結點的樹

e.完全二叉樹:只有最下面兩層結點的度<2,且最下一層的葉子結點都集中在左子樹

(1)先序遍歷

abc deh fgk (最後乙個是最右最下結點)

(2)中序遍歷

db feg ac kh (最後乙個是最右結點)

(3)後序遍歷

dfg eb khc a (最後乙個是根節點)

目的:列印一棵二叉樹

要求:寬度優先遍歷

1.遍歷二叉樹:從根節點開始,從上往下,從左到右

2.依次列印出這些結點

'''

變數含義:

1.last:指向二叉樹當前層的最右結點(換層標識)

2.nlast:指向當前從二叉樹上取出的結點的左右孩子,一般遍歷完一層之後nlast都指向當前

層最右結點的右孩子

3.node:表示當前從queue取出並放入temp的那個結點

4.queue:列表,用來存放二叉樹的結點

5.res:列表,用來存放最終待列印的結點

6.temp:列表,用來臨時存放二叉樹每一層的節點

過程: 二叉樹——>queue——>temp——>res

1.上到下:遍歷二叉樹,按層乙個個獲取結點

2.左到右:把獲取的節點node + 節點左孩子node.left + 節點右孩子node.right——>

queue(即:用佇列形式來儲存二叉樹節點)。 此時:

last指向獲取的節點所在層的最右節點,

3.遍歷:把當前獲取的節點node——>temp,然後繼續從queue獲取隊頭(可能是node的兄弟),

在上一步他們曾作為左右孩子加入了queue

4.換層:當node=last時,即:獲取到當前層的最右節點時,表示此層遍歷完畢,此時需要把

此層結點(在temp中)——>res

5.一層層遍歷完後,列印出res

'''# 定義乙個二叉樹類,存放"結點的初始化"函式

class

treenode:

def__init__

(self,x):

# 初始化結點x

self.val = x # 結點的值為x

self.left = none

# 結點的左孩子初始化為空

self.right = none

# 結點的右孩子初始化為空

# 定義乙個列印二叉樹的類,存放"列印二叉樹的方法"

class

treeprinter:

defprinttree

(self,root):

queue = # 定義乙個佇列,用來存放二叉樹中的結點(原始)

temp = # 定義乙個臨時列表,用來存放每一層遍歷出的結點 (臨時)

res = # 定義乙個空列表,用來存放最終供列印輸出的結點(最終)

if root == none: # 如果根節點為空,證明此二叉樹為空

return res # 則返回空列表

last = nlast = root # 設定last和nlast最初都指向root

# 當queue的長度不為0(即:此二叉樹不為空)時,執行此迴圈

while len(queue):

# 先從佇列頭開始取結點,把取出的結點賦給變數node(最開始彈出的是根節點)

node = queue.pop(0) # node表示此刻從queue中取出的結點

# 再將從佇列中取出的結點暫時放進臨時列表temp中

# 獲取左右孩子結點

if node.left != none: # 如果從queue取出的這個結點有左孩子

nlast = node.left # 並讓nlast指向左孩子

if node.right != nine: # 如果彈出的這個結點有右孩子

nlast = node.right # 並讓nlast指向右孩子

# 當前層取完,為取下一層結點做準備

# 若當前取的結點=last,即:此刻取的是當前層的最右結點,意味著即將走到下一層

if node == last:

temp = # 把temp重置為空列表,使它能繼續存放下一層的結點

last = nlast # 換行:此時nlast指向當前層最右節點的右孩子,讓last跳到下一層的最右節點

return res

資料結構 二叉樹(Python實現)

class node object def init self,data,left none,right none self.data data self.left left self.right right binarytree node 1,node 3,node 7,node 0 node 6...

Python 二叉樹資料結構

二叉樹是每個結點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 將二叉樹的節點定義為乙個物件,節點之間通過類似鍊錶的鏈結方式來連線。二叉樹的遍歷方式 前序遍歷 eacbdgf 中序遍歷 abcdegf 後序遍歷 bdcafge 層次遍...

資料結構 線索二叉樹 python實現

線索二叉樹是在普通二叉樹的基礎上對根節點上的空指標域做了改變,定義使左指標指向當前節點的前驅節點,右指標指向當前節點的後繼節點。這種加上了線索的二叉鍊錶稱為線索鍊錶,相應的二叉樹稱為線索二叉樹 threaded binarytree 根據線索性質的不同,線索二叉樹可分為前序線索二叉樹 中序線索二叉樹...