python樹的雙親存儲結構

這種存儲結構是一種順序存儲結構,采用元素形如“[結點值,雙親結點索引]”的列表表示。通常每個結點有唯一的索引(或者偽地址),根結點的索引為0,它沒有雙親結點,其雙親結點的索引為-1。例如,所示的樹對應的雙親存儲結構如下:
#樹的雙親存儲結構

t=[["A",-1],["B",0],["C",0],["D",1],["E",1],["F",1],["G",4]]


在該存儲結構t中,索引為i的結點是t[i],其中t[i][0]為結點值,t[i][1]為該結點的雙親結點的索引。

若一棵樹采用雙親在儲結構存儲,設計一個算法求指定索引是i的結點的層次。
解:用cnt?表示索引i的結點的層次(初始為1)。沿著雙親指針向上移動,當沒有到達根結點時循環:cnt?增1,i向上移動一次。當到達根結點時cnt?恰好為原索引i結點的層次,最后返回cnt。對應的算法如下:


```python
def find_level(parent, i):cnt = 1while parent[i] != -1:cnt += 1i = parent[i]return cnt
```

?python樹的雙親存儲結構:

class FNode():def __init__(self,name=None,i=None):#name為數據,i為其對應的父節點下標self.node=[name,i]
class ftree():#存儲節點數據def __init__(self):self.data=[]#增加def add(self,name,i):#添加節點數據進入數的結構p = FNode(name,i)#建立節點self.data.append(p.node)#添加進入#創建def CreateTree(self,arr):#傳入對應數據建立數arr為一個樹關系的二維列表for i in arr:self.data.append(i)#刪除def Dex(self,name,i):#給出節點的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# 修改節點數據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_namebreak#查找節點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]#遍歷樹結構,雙親存儲單位的結構決定了它只能層次遍歷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))

雙親存儲結構利用了每個結點(根節點除外)有啡一雙親的性質。在這種存儲結構
中,求某個結點的雙親結點十分容易,但求某個結點的孩子結點時需要遍歷整個結構。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165815.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165815.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165815.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

123. 股票買賣的最佳時機III(2次交易)

題目 題解 class Solution:def maxProfit(self, prices: List[int]) -> int:N len(prices)# 狀態定義 dp[i][j][k]代表在第i天,被允許完成j次交易時,持有或者不持有的最大利潤。k0代表不持有,k1代表持有dp [[[0 for k in range(2)] for…

醫學生秋招攻略,面試時一定要注意這些方面!

醫學生別拖了,今年秋招已經過去一波熱度了,趕早不趕晚!在籌備第二輪秋招以及明年的春招的醫學生一定要注意以下事項。 1.清晰目標 搜集秋招訊息 一定要早點多做準備,想清楚未來的目標,是繼續深造還是就業做醫生或者是…

FileReader與URL.createObjectURL實現圖片、視頻上傳預覽

之前做圖片、視頻上傳預覽常用的方案是先把文件上傳到服務器,等服務器返回文件的地址后,再把該地址字符串賦給img或video的src屬性,這才實現所謂的文件預覽。實際上這只是文件“上傳后再預覽”,這既浪費了用戶的時間,也…

java開發合同相關

【點我-這里送書】 本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發王大師,專注于天道酬勤的 Java 開發問題中國國學、傳統文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明來源(…

集合的分類

Python內建的集合類,有有序和無序之分,還有可修改和不可修改之分。 1 有序和無序 有序是說某數據集合中的每個元素都有一個位置信息,通常用index表示,可以借助這種集合類型名和位置信息訪問集合里的某元素值,在Pytho…

【開源】基于Vue.js的用戶畫像活動推薦系統

項目編號: S 061 ,文末獲取源碼。 \color{red}{項目編號:S061,文末獲取源碼。} 項目編號:S061,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 數據中心模塊2.2 興趣標簽模塊2.3 活…

[Android]使用Git將項目提交到GitHub

如果你的Mac還沒有安裝Git,你可以通過Homebrew來安裝它: brew install git 方式一:終端管理 1.創建本地Git倉庫 在項目的根目錄下,打開終端(Terminal)并執行以下命令來初始化一個新的Git倉庫&#xff1…

vue3-組件傳參及計算屬性

?🌈個人主頁:前端青山 🔥系列專欄:Vue篇 🔖人終將被年少不可得之物困其一生 依舊青山,本期給大家帶來vue篇專欄內容:vue3-組件傳參及計算屬性 目錄 vue3中的組件傳參 1、父傳子 2、子傳父 toRef 與 toRefs vue3中…

數據結構 查找基本概念

敬請期待。。。 1. 適用于折半查找的表的存儲方式及元素排列要求為(順序方式存儲,元素有序 )。 2. 有一個按元素值排好序的順序表(長度大于2),分別用順序查找和折半查找與給定值相等的元素,比較次數分別是s和b&am…

拼接合并yuv序列轉成mp4

ffmpeg需要用支持libx264的版本,如果需要,可以從這個網站下載編譯支持libx264\x265的ffmpeg https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-6.1-essentials_build.7z #-*- coding:utf-8-*- import osif __name__ "__main__":# 1 輸入…

實例講解:在3dMax中如何使用python腳本?

如果你是Python或Maxscript的新手,你現在可以跟著這篇文章開始做一些代碼了,本文將讓我們從非常基本的東西開始學習。 如何在3dmax中獲取選定的節點并打印出它們的名稱?所有場景對象如何?我們直接看代碼: import MaxP…

Word/PPT/PDF怎么免費轉為JPG圖片?

1、打開金鳴表格文字識別網站。 2、點擊導航條上的“軟件下載” 3、安裝并打開金鳴表格文字識別軟件。 4、點擊頂部導航欄的“文件轉圖片”。 5、選擇需要轉換成圖片的文件(支持Word/PPT/PDF). 6、點“打開”程序將自動分頁轉換為圖片。

【論文閱讀筆記】Smil: Multimodal learning with severely missing modality

Ma M, Ren J, Zhao L, et al. Smil: Multimodal learning with severely missing modality[C]//Proceedings of the AAAI Conference on Artificial Intelligence. 2021, 35(3): 2302-2310.[開源] 本文的核心思想是探討和解決多模態學習中的一個重要問題:在訓練和測…

【dart線程之怎么處理異步和順序異步任務隊列】

dart線程之怎么處理異步和順序異步任務隊列 單線程的dart怎么處理異步任務的? 事件循環模型就是實現異步處理任務的核心。 關于阻塞式調用和非阻塞式調用的概念 阻塞和非阻塞關注的是程序在等待調用結果(消息、返回值)時的狀態阻塞式調用…

JS中的OOP

JS中的OOP OOP 為我們解決了什么問題?想象一下,我們希望為教師提供一個平臺,每位注冊的教師都可以提交分數,并為課程分配作業和其他內容。 如果有一個地方(在本例中是一個對象),可以訪問所有教…

Python編寫的爬蟲為什么受歡迎?

每每回想起我當初學習python爬蟲的經歷,當初遇到的各種困難險阻至今都歷歷在目。即便當初道阻且長,窮且益堅,我也從來沒有想過要放棄。今天我將以我個人經歷,和大家聊一聊有關Python語音編寫的爬蟲的事情。談一談為什么最近幾年py…

C#中的事件(委托的發布和訂閱、事件的發布和訂閱、EventHandler類、Windows事件)

目錄 一、委托的發布和訂閱 1.訂閱操作符號“"和取消訂閱操作符號“-” 2.示例源碼 二、事件的發布和訂閱 三、EventHandler類 四、Windows事件 C#中的事件是指某個類的對象在運行過程中遇到的一些特定事情,而這些特定的事情有必要通知給這個對象的使用者…

【海德教育】河北初級職稱報名條件:

河北助理工程師 學歷要求 大專畢業后滿3年,工程類專業 本科畢業后滿1年 ,工程類專業 非工程類專業,年限增加2年即可。

多線程,線程池,線程的創建,線程池的參數

文章目錄 多線程-1 高并發〇、使用多線程的場景1. 為什么使用多線程 1. 線程概述1.1 線程和進程1.2 并發和并行1.3 多線程的優勢1.4 程序運行原理1.5 主線程 1.6 線程的 6 種狀態2. 線程的創建和啟動2.1 Thread類2.2創建線程有哪幾種方法2.2.1 繼承**Thread**類,重寫…

centos7 安裝docker

1.卸載舊版本,不管裝沒裝過,執行一下,防止版本沖突 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2. yum安裝gcc相關 以及 安…