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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

树的定义与存储

發(fā)布時(shí)間:2024/7/5 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树的定义与存储 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

樹的定義

樹(tree):n(n>=0)個(gè)結(jié)點(diǎn)的有限集T。

n=0 則稱為空樹。

當(dāng)n>0時(shí),有且僅有一個(gè)特定的結(jié)點(diǎn),稱為樹的根(root)。

當(dāng)n>1時(shí),其余結(jié)點(diǎn)可分為m(m>=0)個(gè)互不相交的有限集T1,T2,..Tm,其中每一個(gè)和本身又是一棵樹,稱為根的子樹(subtree)。

?

???   ①

  ╱ │ ╲

②   ④   ③

樹與非樹識(shí)別

除了根結(jié)點(diǎn)外,每個(gè)結(jié)點(diǎn)有且僅有一個(gè)父結(jié)點(diǎn)。

一個(gè)N個(gè)結(jié)點(diǎn)的樹,共有N-1條邊。

?

樹的基本術(shù)語

結(jié)點(diǎn)(node)--表示樹中的元素,包含數(shù)據(jù)元素及若干指向其子樹的分支。

結(jié)點(diǎn)的度(degree)--結(jié)點(diǎn)擁有的子樹數(shù)。

葉子(leaf)或終端結(jié)點(diǎn)--度為0的結(jié)點(diǎn)。

分支結(jié)點(diǎn)--度不為0的結(jié)點(diǎn)。

樹的度--一棵樹中最大的結(jié)點(diǎn)度數(shù)。

孩子(child)--結(jié)點(diǎn)子樹的根稱為該結(jié)點(diǎn)的孩子。

雙親(parents)--孩子結(jié)點(diǎn)的上層結(jié)點(diǎn)叫該結(jié)點(diǎn)的雙親。

兄弟(sibling)--同一雙親的孩子。

祖先結(jié)點(diǎn)--從根節(jié)點(diǎn)到該結(jié)點(diǎn)路徑上所有結(jié)點(diǎn)。

子孫結(jié)點(diǎn)--一個(gè)結(jié)點(diǎn)的直接后繼和間接后繼。

結(jié)點(diǎn)的層次(level)--從根節(jié)點(diǎn)算起,根為第一層,它的孩子為第二層...

深度(depth)--樹中節(jié)點(diǎn)的最大層次數(shù)。

?

      A

    ╱ │ ╲

  B  ? C   ? D

?    ? ? ╱  ╲  

   E    F

      ??  │

      ?  G

?

樹的度和結(jié)點(diǎn)數(shù)的關(guān)系

樹中結(jié)點(diǎn)數(shù)=總分叉數(shù)+1.  (分叉數(shù)就是所有結(jié)點(diǎn)的度之和,也是指:邊+1)

n0+n1+n2+n3+n4 = n1*1 +n2*2+n3*3+n4*4 +1?????? (n1表示度為1的結(jié)點(diǎn)數(shù),下例中n1的值為:4)

葉子的度數(shù)為0

設(shè)數(shù)T的度為4,其中度為1,2,3,4的節(jié)點(diǎn)個(gè)數(shù)分別為4,2,1,1 則T中的葉子數(shù)為多少?

解:

葉子的度數(shù)為0,設(shè)葉子的個(gè)數(shù)為x;

樹的總分叉數(shù)為:1*4+2*2+3*1+4*1=15

此樹的結(jié)點(diǎn)數(shù)為:16?? (15+1)

得出式子:4+2+1+1+x=16

得到:x=8

T中的葉子數(shù)為8。

?

?

樹型結(jié)構(gòu)與線性結(jié)構(gòu)

線性結(jié)構(gòu):

第一個(gè)數(shù)據(jù)元素(無前驅(qū))

最后一個(gè)數(shù)據(jù)元素(無后繼)

其他數(shù)據(jù)元素(一個(gè)前驅(qū)、一個(gè)后繼)

?

樹型結(jié)構(gòu)(非線性結(jié)構(gòu)):

根結(jié)點(diǎn)(無前驅(qū))

多個(gè)葉子結(jié)點(diǎn)(無后繼)

其他數(shù)據(jù)元素(一個(gè)前驅(qū)、多個(gè)后繼

?

如何表示樹中元素間的關(guān)系?

      A

    ╱ │ ╲

  B  ? C   ? D

?    ? ? ╱  ╲  

   E    F

      ??  │

      ?  G

雙親表示法

  data  parent

0  A  -1

1  B  0

2  C  0

3  D  0

4  E  2

5  F  2

6  G  5

樹的存儲(chǔ)結(jié)構(gòu)-孩子表示法

孩子鏈表:每個(gè)結(jié)點(diǎn)的孩子結(jié)點(diǎn)用單鏈表存儲(chǔ),再用含n個(gè)元素的結(jié)構(gòu)數(shù)組指向每個(gè)孩子鏈表。

      A

    ╱  ╲

  B     ?? C   ?

? ╱   ? ╲      ╲  

D  ???  E  ?????  F

   ╱? ?? │?? ╲

  G   H????? I

?

  datafc? ??  ?            
0?????????
1A23^???
2B45^???
3C6^?????
4D^???????
5E789^?
6F^???????
7G^???????
8H^???????
9I^???????

帶雙親的孩子鏈表

  dataparentfc? ??  ?            
1A023^???
2B145^???
3C16^?????
4D2^???????
5E2789^?
6F3^???????
7G5^???????
8H5^???????
9I5^???????

?

樹的存儲(chǔ)結(jié)構(gòu)-孩子兄弟表示法

實(shí)現(xiàn):設(shè)計(jì)統(tǒng)一的結(jié)點(diǎn)結(jié)構(gòu),每個(gè)節(jié)點(diǎn)的兩個(gè)指針域分別指向其第一個(gè)孩子結(jié)點(diǎn)和下一個(gè)兄弟結(jié)點(diǎn)。

^ A ^  其中兩個(gè)指針

特點(diǎn):

操作容易

空間浪費(fèi)少

       ↙  A                
???B?→?↓?C?^?????
?????????????
?????^F?^?????
?????????????
?^DE^??????
????????????
?????^?G?→?^?H?→^I^
?????????????

?

typedef struct SCNode

{ ElemType data;

  struct SCNode *firstchild, *nextsibling;

}CSNode,*CSTree;

?

向右旋轉(zhuǎn)45o得到一棵樹,二叉樹。

每個(gè)結(jié)點(diǎn)至多只有二棵子樹并且子樹有左右之分,其次序不能任意顛倒的樹稱為二叉樹。

?

轉(zhuǎn)載于:https://www.cnblogs.com/privilege/p/11184628.html

總結(jié)

以上是生活随笔為你收集整理的树的定义与存储的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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