資料結構 (五)樹之五花八門篇

2021-09-25 15:42:06 字數 1688 閱讀 1972

普通二叉樹:對二叉樹的結點沒有位置及數量上的要求

滿二叉樹: 乙個二叉樹,如果每乙個層的結點數都達到最大值,則這個二叉樹就是滿二叉樹。也就是說,如果乙個二叉樹的層數為k,且結點總數是(2^k) -1 ,則它就是滿二叉樹。

有序二叉樹(又稱二叉排序樹,又稱二叉查詢樹,亦稱二叉搜尋樹):左子樹的所有結點都比雙親小,右子樹的所有結點都比雙親大

平衡二叉樹:左右高度相差不超過1的有序二叉樹  (首先是有序的二叉樹,樹的左右子樹的高度相差不超過1,並且子樹的子樹都滿足這個要求) 

紅黑樹:實現平衡的一種手段   結點只有兩種顏色:紅和黑; 根節點是黑色;從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

線索二叉樹 :在二叉樹的結點上加上線索的二叉樹

平衡二叉搜尋樹:平衡二叉樹和二叉搜尋樹的結合的結合

完全二叉樹:若設二叉樹的深度為h,除第 h 層外,其它各層 (1~h-1) 的結點數都達到最大個數,第 h 層所有的結點都連續集中在最左邊,這就是完全二叉樹。

完全二叉樹的特點:

1.葉子結點在層次最大的兩層出現;

2.滿二叉樹是完全二叉樹,完全二叉樹不一定是滿二叉樹

3.在完全二叉樹中,若某個結點沒有左孩子,則它一定沒有右孩子,即該結點必是葉結點。

4.完全二叉樹中,度為1的節點只能是1或者0個

完全二叉樹的性質:

1.n個結點的完全二叉樹的深度為大於以2為底n+1的對數的最小整數(>log2(n+1)的最小整數)。

2.將完全二叉樹自頂而下,同一層自左向右編號,則有:

如果i=1,i為根,無雙親;如果i>1,雙親為結點 i/2

如果2i<=n,結點i的左孩子為結點2i;否則無左孩子

如果2i+1<=n,結點i的右孩子為結點2i+1,否則無右孩子

結點i所在的層次為log2n+1

i為奇數,且i!=1,i處於右兄弟的位置,它的左兄弟為結點i-1

i為偶數,且i!=n,i處於左兄弟的位置,它的右兄弟為結點i+1

3.2^(k-1) 或 pow(2,k-1)  算k層結點數

4.一棵有124個葉結點的完全二叉樹,最多有248個結點   (248=124+123+1)

具有n個結點的不同二叉樹有多少樹形?

與用棧得出的從1到n的數字有多少不同的排列具有相同的結論:c(2n,n)/(n+1) (c(2n,n)表示2n裡取n)

設n個數出棧方式數量為f(n)

因為入棧的順序是確定的,下標記為1,2,3,...n

設最後乙個出棧的是第k個數,則說明k之前的k-1個數先完成進棧出棧,有f(k-1)種方式;

然後k之後的n-k個數再完成進棧出棧,有f(n-k)種方式;最後第k個數出棧。

這時就有f(k-1)*f(n-k)種方式

而每乙個數都有可能是最後出棧的

所以有f(n)=f(0)*f(n-1)+f(1)*f(n-2)+...+f(k-1)*f(n-k)+...+f(n-1)*f(0)

上面f(0)=1是為了寫成統一式:f(n)=f(k-1)*f(n-k)

由上式的通項就是卡特蘭數f(n)=c(2n,n)/(n+1)

五花八門的Barcamp和五花八門的人

像barcamp這樣的活動很有意思,據說這個活動是從國外引入的,就是一群可能誰也不認識的人,在某個固定的時間 固定的地點聚在一起,自願寫下自己分享的話題,在討論之後,開始分組討論,上面演講,底下提問,其樂融融。在北京的時候,自己作為乙個看客參加,沒有太多感觸,而在上海作為乙個speaker參加,感觸...

五花八門的Barcamp和五花八門的人

像barcamp這樣的活動很有意思,據說這個活動是從國外引入的,就是一群可能誰也不認識的人,在某個固定的時間 固定的地點聚在一起,自願寫下自己分享的話題,在討論之後,開始分組討論,上面演講,底下提問,其樂融融。在北京的時候,自己作為乙個看客參加,沒有太多感觸,而在上海作為乙個speaker參加,感觸...

五花八門實現元素居中

這篇文章很早就想寫了,一直拖到現在,終於動手了,哈哈 行內元素 在其父元素上設定 text align center 單個塊級元素 設定width以及margin 0 auto 多個塊級元素實現水平居中 1 為這些塊級元素設定display inline block屬性,其父元素設定 text al...