python樹的雙親存儲結(jié)構(gòu)的實現(xiàn)示例
這種存儲結(jié)構(gòu)是一種順序存儲結(jié)構(gòu),采用元素形如“[結(jié)點值,雙親結(jié)點索引]”的列表表示。通常每個結(jié)點有唯一的索引(或者偽地址),根結(jié)點的索引為0,它沒有雙親結(jié)點,其雙親結(jié)點的索引為-1。例如,所示的樹對應(yīng)的雙親存儲結(jié)構(gòu)如下:
樹的雙親存儲結(jié)構(gòu)
t=[["A",-1],["B",0],["C",0],["D",1],["E",1],["F",1],["G",4]]
在該存儲結(jié)構(gòu)t中,索引為i的結(jié)點是t[i],其中t[i][0]為結(jié)點值,t[i][1]為該結(jié)點的雙親結(jié)點的索引。

若一棵樹采用雙親在儲結(jié)構(gòu)存儲,設(shè)計一個算法求指定索引是i的結(jié)點的層次。
解:用cnt 表示索引i的結(jié)點的層次(初始為1)。沿著雙親指針向上移動,當(dāng)沒有到達根結(jié)點時循環(huán):cnt 增1,i向上移動一次。當(dāng)?shù)竭_根結(jié)點時cnt 恰好為原索引i結(jié)點的層次,最后返回cnt。對應(yīng)的算法如下:
def find_level(parent, i):
cnt = 1
while parent[i] != -1:
cnt += 1
i = parent[i]
return cntpython樹的雙親存儲結(jié)構(gòu):
class FNode():
def __init__(self,name=None,i=None):#name為數(shù)據(jù),i為其對應(yīng)的父節(jié)點下標(biāo)
self.node=[name,i]
class ftree():#存儲節(jié)點數(shù)據(jù)
def __init__(self):
self.data=[]
#增加
def add(self,name,i):#添加節(jié)點數(shù)據(jù)進入數(shù)的結(jié)構(gòu)
p = FNode(name,i)#建立節(jié)點
self.data.append(p.node)#添加進入
#創(chuàng)建
def CreateTree(self,arr):#傳入對應(yīng)數(shù)據(jù)建立數(shù)arr為一個樹關(guān)系的二維列表
for i in arr:
self.data.append(i)
#刪除
def Dex(self,name,i):#給出節(jié)點的name和i進行刪除
for j in range(len(self.data)):
if self.data[j][0]==name and self.data[j][1]==i:
self.data.pop(j)
break
# 修改節(jié)點數(shù)據(jù)
def alter(self,name,i,n_name):
for j in range(len(self.data)):
if self.data[j][0]==name and self.data[j][1]==i:
self.data[j][0]=n_name
break
#查找節(jié)點
def find(self,name,i):
for j in range(len(self.data)):
if self.data[j][0]==name and self.data[j][1]==i:
return self.data[j]
#遍歷樹結(jié)構(gòu),雙親存儲單位的結(jié)構(gòu)決定了它只能層次遍歷
def display(self):
for i in range(len(self.data)):
print(self.data[i][0],end=" ")
print()
t = [['A',-1],['B',0],['C',0],['D',1],['E',1],['F',1],['G',4]]
tree_1 = ftree()
tree_1.CreateTree(t)
tree_1.display()
tree_1.add('H',4)
tree_1.display()
tree_1.Dex('H',4)
tree_1.display()
tree_1.alter('G',4,'5')
tree_1.display()
print(tree_1.find('A',-1))雙親存儲結(jié)構(gòu)利用了每個結(jié)點(根節(jié)點除外)有啡一雙親的性質(zhì)。在這種存儲結(jié)構(gòu)中,求某個結(jié)點的雙親結(jié)點十分容易,但求某個結(jié)點的孩子結(jié)點時需要遍歷整個結(jié)構(gòu)。
到此這篇關(guān)于python樹的雙親存儲結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)python樹的雙親存儲結(jié)構(gòu)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python判斷質(zhì)數(shù)(素數(shù))的簡單方法講解
這篇文章主要介紹了使用Python判斷質(zhì)數(shù)(素數(shù))的簡單方法講解,經(jīng)常被用來做科學(xué)計算的Python處理這種小問題當(dāng)然手到擒來^_-需要的朋友可以參考下2016-05-05
Python實現(xiàn)對word文檔添加密碼去除密碼的示例代碼
這篇文章主要介紹了Python實現(xiàn)對word文檔添加密碼去除密碼,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Python讀取Excel數(shù)據(jù)并進行可視化分析
這篇文章主要為大家詳細(xì)介紹了如何使用Python實現(xiàn)讀取Excel數(shù)據(jù)并進行可視化分析,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2025-08-08
Centos Python2 升級到Python3的簡單實現(xiàn)
下面小編就為大家?guī)硪黄狢entos Python2 升級到Python3的簡單實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
Python try-except-else-finally的具體使用
本文主要介紹了Python try-except-else-finally的具體使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08

