資料結構 樹

2021-10-09 23:47:15 字數 2704 閱讀 6136

樹的概念:

樹是一種抽象資料型別或是實作這種抽象資料型別的資料結構,用來模擬具有樹狀結構性質的資料集合。它是由n(n>=1)個有限節點組成乙個具有層次關係的集合。把它叫做「樹」是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。它具有以下的特點:

每個節點有零個或多個子節點;

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

每乙個非根節點有且只有乙個父節點;

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

比如說:

中國就是根節點

例如:

其中二叉樹是最為常見的一種數的結構

完全二叉樹:

除去第四層,其他各層的節點數目均已達到了最大值。

滿二叉樹:

所有的節點都滿足最大值的條件

例如:

性質1:在第2層最多有2*(2-1),也就是2個節點;

性質2:這棵樹深度為4 ,最多的時候為滿二叉樹:

第0層為2的0次,第1層為2的1次,第2層為2的2次,第3層為2的3次 -1,所以至多有2^k - 1個結點(k>0)

性質3:

其葉節點數n0為5,分別為h,i,j,f,g. 度數為2的節點數n2為4,分別為:a,b,c,d. 則n0=n2+1

性質4:

例如這個滿二叉樹的節點數為7 所以完全二叉樹的深度必為 log2(7+1) 為4

性質5:

編號為i為2的父節點b,其左孩子d的編號為2i為4,右孩子e的編號為2i+1為5

按照廣度優先遍歷的方式去在最末尾新增

#coding=utf-8

#@time:2020/10/5 8:59

#@author:csdn@hijacklei

#@file:二叉樹的實現.py

#@software:pycharm

# 樹的插入操作

class

node

(object):

'''定義節點'''

def__init__

(self,item)

: self.elem=item

#定義左孩子

self.lchild=

none

#定義右孩子

self.rchild=

none

class

tree

(object):

'''二叉樹'''

def__init__

(self)

: self.root=

none

defadd

(self,item)

:#構造出節點node

node=node(item)

# 如果是空樹的話,直接讓跟節點等於node

if self.root is

none

: self.root=node

return

#佇列操作 查詢是佇列操作

queue=

[self.root]

# 判斷條件當佇列中的元素不為空時,一直可以執行取出操作並且進行左孩子和右孩子的判斷

while queue:

#先從佇列中取出來乙個節點 從佇列的頭部去取

cur_node=queue.pop(0)

#從佇列中彈出元素

if cur_node.lchild is

none

: cur_node.lchild=node

return

else

:if cur_node.rchild is

none

: cur_node.rchild=node

return

else

:tree=tree(

)

首先構建節點node寫為乙個類,定義3個屬性;

其次構建樹的類tree,遍歷操作構建樹;

資料結構 樹

樹的概念 1.家族樹 在現實生活中,有入如下血統關係的家族可用樹形圖表示 張源有三個孩子張明 張亮和張麗 張明有兩個孩子張林和張維 張亮有三個孩子張平 張華和張群 張平有兩個孩子張晶和張磊。以上表示很像一棵倒畫的樹。其中 樹根 是張源,樹的 分支點 是張明 張亮和張平,該家族的其餘成員均是 樹葉 而...

資料結構 樹

1 定義 樹是一種非線性結構,是一種一對多的資料結構。分析樹的結構,我們用遞迴的方法,根結點下面又可以看做是子樹。2 樹的儲存結構 我們一般用孩子兄弟法儲存。也就是把乙個結點的左邊第乙個孩子放在此結點的左邊孩子,把此結點的右兄弟放在此結點的右邊孩子。這樣就產生了二叉樹。二叉樹和樹可以相互對應。3 二...

資料結構 樹

二叉樹性質回顧 滿二叉樹 完全二叉樹等 給定一棵二叉樹,要求分層遍歷該二叉樹,即從上到下按層次訪問該樹,每一層單獨輸出一行,每一層要求訪問的順序為從左到右。我們在遍歷的過程中將該層節點的孩子節點壓入乙個佇列,這樣就可以實現從上到下一層一層地遍歷該二叉樹。層序遍歷 並分層列印 如果不用分層的話只用佇列...