日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

理论基础 —— 树 —— 树的存储结构

發(fā)布時間:2025/3/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 理论基础 —— 树 —— 树的存储结构 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【父親表示法】

由于樹中每個結(jié)點均有且僅有一個父結(jié)點,那么根據(jù)這一特性,用一維數(shù)組來存儲樹的各個結(jié)點(一般按層序存儲),數(shù)組中的一個元素對應(yīng)樹中的一個結(jié)點,每個結(jié)點記錄兩類信息:結(jié)點的數(shù)據(jù)信息、該結(jié)點的父親在數(shù)組中的下標(biāo)

優(yōu)缺點:利用了樹中除根結(jié)點外每個結(jié)點都有唯一的父結(jié)點這個性質(zhì),很容易找到樹根,但找孩子時需要遍歷整個線性表

template<class T> struct Node{T data;//數(shù)據(jù)域,存放該結(jié)點的數(shù)據(jù)信息int parent;//指針域,指向該結(jié)點的父結(jié)點 }tree[N];

【孩子表示法】

樹的孩子表示法是基于鏈表的存儲方法,其缺陷是只能從父結(jié)點遍歷到子結(jié)點,不能從某個子結(jié)點返回到它的父結(jié)點,有兩種形式:

1.多重鏈表表示法

由于樹中的每個結(jié)點都可能有多個孩子,因此鏈表中的每個結(jié)點都包含一個數(shù)據(jù)域與多個指針域,每個指針域指向該結(jié)點的一個孩子結(jié)點。

由于樹中各節(jié)點的度不同,因此指針域的設(shè)置有兩種方法:

  • 指針域的個數(shù)等于該結(jié)點的度:節(jié)省空間但各種操作不易實現(xiàn),適用于各節(jié)點的度相差較大、操作較少的情況
  • 指針域的個數(shù)等于樹的度:浪費空間但各種操作容易實現(xiàn),適用于各節(jié)點的度相差不大、操作較多的情況
//指針域的個數(shù)等于該結(jié)點的度 template<class T> struct Node{T data;//數(shù)據(jù)域,存放數(shù)據(jù)信息int degree;//度域,存放該結(jié)點的度int child[degree];//指針域,child[i]指向該結(jié)點的第i個孩子 }tree[N];//指針域的個數(shù)等于樹的度 template<class T> int num;//num為樹的度 struct Node{T data;//數(shù)據(jù)域,存放數(shù)據(jù)信息int child[num];//指針域,child[i]指向該結(jié)點的第i個孩子 }tree[N];

2.孩子鏈表表示法

用多個單鏈表來表示樹,將每個結(jié)點的孩子結(jié)點進行排列,看成一個線性表,并以單鏈表存儲,稱為該結(jié)點的孩子鏈表。

那么,n 個結(jié)點共有 n 個孩子鏈表,其中葉結(jié)點的孩子鏈表為空,即 n 個單鏈表共有 n 個頭指針,這 n 個頭指針又組成了一個線性表,將這存放 n 個頭指針的數(shù)組和存放 n 個結(jié)點的數(shù)組結(jié)合起來,構(gòu)成孩子鏈表的表頭數(shù)組

struct childNode{//孩子結(jié)點int child;childNode *next; }; template<class T> struct tableNode{//表頭結(jié)點T data;childNode *firstChild; };

【父親孩子表示法】

父親孩子表示法是父親表示法、孩子鏈表表示法的結(jié)合。

父親孩子表示法仍將各結(jié)點的孩子分別組成單鏈表,同時用一維數(shù)組順序存儲樹中的各節(jié)點,數(shù)組元素除了包括結(jié)點的數(shù)據(jù)信息和該結(jié)點的孩子鏈表的頭指針外,還增設(shè)一指針域用于該結(jié)點的父結(jié)點在數(shù)組中的下標(biāo)。

template<class T> struct Node{T data;//數(shù)據(jù)域,存放數(shù)據(jù)信息Node<T> *child[m];//指針域,指向若干孩子結(jié)點Node<T> *father;//指針域,指向父親結(jié)點 };

【孩子兄弟表示法】

孩子兄弟表示法又稱二叉鏈表表示法,是一種雙鏈表結(jié)構(gòu),其鏈表中的每個結(jié)點除數(shù)據(jù)域外,還設(shè)置了兩個指針分別指向該結(jié)點的第一個孩子和右兄弟。

template <class T> struct Node{T data;//數(shù)據(jù)域,存放數(shù)據(jù)信息Node<T> *firstChild;//指針域,存放該結(jié)點第一個孩子結(jié)點的地址Node<T> *rightBrother;//指針域,存放該結(jié)點的右兄弟的地址 };

?

總結(jié)

以上是生活随笔為你收集整理的理论基础 —— 树 —— 树的存储结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。