樹的存儲結構有
㈠ 二叉樹通常鏈式結構還有什麼結構
二叉樹就物理結構來分可以分成:順序存儲結構和鏈式存儲結構。
(1)順序存儲結構:
順序存儲結構,顧名思義就是二叉樹的數據元素存放在一組連續的存儲單元中。其主要有一下幾個特點:
①邏輯上相鄰的兩個元素在物理位置上也是相鄰的;
②操作刪除和插入的時候,需要整體移動元素;
③需要預先分配空間,不能動態增長;
(2)鏈式存儲結構:
鏈式存儲結構中二叉樹的每個結點至少包含三個域:數據域、左指針域和右指針域。其二叉樹是通過指針實現,鏈式存儲結構有以下幾個特點:
①邏輯上相鄰的兩個元素在物理位置上不一定是相鄰的;
②操作刪除和插入的時候,不需要整體移動元素;只需要修改相應的指針即可;
③不需要預先分配空間;
④存儲指針本身會消耗一定的存儲的空間;
㈡ 二叉樹 兩種存儲結構的優缺點
順序存儲可能會浪費空間,但是讀取某個指定的節點的時候效率比較高,鏈式存儲相對二叉樹比較大的時候浪費空間較少,但是讀取某個指定節點的時候效率偏低O(nlogn)。
在數據的順序存儲中,由於每個元素的存儲位置都可以通過簡單計算得到,所以訪問元素的時間都相同;而在數據的鏈接存儲中,由於每個元素的存儲位置保存在它的前驅或後繼結點中,所以只有當訪問到其前驅結點或後繼結點後才能夠按指針訪問到。
(2)樹的存儲結構有擴展閱讀:
分類:
順序存儲方法它是把邏輯上相鄰的結點存儲在物理位置相鄰的存儲單元里,結點間的邏輯關系由存儲單元的鄰接關系來體現,由此得到的存儲表示稱為順序存儲結構。順序存儲結構是一種最基本的存儲表示方法,通常藉助於程序設計語言中的數組來實現。
鏈接存儲方法它不要求邏輯上相鄰的結點在物理位置上亦相鄰,結點間的邏輯關系是由附加的指針欄位表示的。由此得到的存儲表示稱為鏈式存儲結構,鏈式存儲結構通常藉助於程序設計語言中的指針類型來實現。
㈢ 數據結構,樹的常用存儲方式
存入文本文件,每行:孩子節點-父節點。
這樣也方便用Hadoop進行處理。
㈣ 樹的存儲表示是什麼
樹的存儲結構根據應用的不同而不同,有的從雙親的角度考慮,引出了雙親表示法,有的從孩子的角度考慮,給出孩子表示法,還有的從孩子和兄弟的角度來討論。這些都是人們在大量的應用中所使用的不同形式的存儲結構,這里介紹常用的雙親表示法、孩子表示法、雙親孩子表示法和孩子兄弟表示法。
1.雙親表示法由樹的定義可知,樹中每個結點都有且僅有一個雙親結點,根據這一特性,可以用一組連續的一維數組來存儲樹中的各個結點(一般按層次存儲),數組中的一個元素對應樹中的一個結點,其中包括結點的數據信息以及該結點的雙親在數組中的下標。樹的這種存儲方法稱為雙親表示法,雙親表示法的結點結構如圖1所示,其中,data表示數據域,存儲樹中結點的數據信息,parent表示指針域,存儲該結點的雙親在數組中的下標。
1.雙親表示法的存儲結構2)雙親表示法示例圖1所示的樹的雙親表示如圖1所示,這是一棵樹及其雙親表示法的存儲結構。根結點A無雙親,所以parent的值為-1,G、H和I的parent值為4,表示它們的雙親是下標為4的結點E。這種存儲結構利用任一結點的雙親是唯一的性質,可以方便地直接找到任一結點的雙親結點,但求結點的孩子結點時需要掃描整個數組。
圖1樹的雙親表示法示例
㈤ 二叉樹的存儲結構是怎樣的有哪些類型的存儲結構對應的c語言描述是
樓上回答的是樹的存儲,不是二叉樹的存儲,主要如下:
1、順序存儲:適用於完全二叉樹,如果根從1開始編號,則第i結點的左孩子編號為2i,右孩子為2i+1,雙親編號為(i/2)下取整,空間緊密
2、二叉鏈表:適用於普通二叉樹,每個結點除了數據外,還有分別指向左右孩子結點的指針,存儲n個結點有n+1個空指針域,存儲密度小於順序存儲,但是適用范圍廣,缺陷是正常遍歷只能從雙親向孩子,退回來一般需要藉助棧(或者用遞歸,其實也是棧)
3、三叉鏈表:同樣適用於普通二叉樹,結點除了數據外,還有左右孩子與雙親的指針,存儲密度低於二叉鏈表,但是可以非常方便地在二叉樹中遍歷,不需要其他輔助工具