Subtrees hdu5524 完全二叉樹

2021-10-08 15:28:07 字數 963 閱讀 9567

題目鏈結subtrees

題意:給出乙個完全二叉樹的節點數,求其不同節點數的子樹的個數

思路:1、先考慮是否為滿二叉樹,如果是滿二叉樹,那麼不同節點子樹的個數即為該而二叉樹的層數

2、如果不為滿二叉樹,那麼就尋找該二叉樹的最大滿二叉樹,記錄這個層數最大的滿二叉樹的層數,那麼剩下的子樹就是小於最大層數的滿二叉樹

這時候就只需要去重,還有一部分子樹是非完全二叉樹,那麼就看以該節點為根節點的二叉樹是否為非滿完全二叉樹,如果是,就+1,並繼續向下尋找,直至葉子節點,因為每一層的非滿完全二叉樹的節點數肯定不同

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

ll ans,n;

int maxn;

intmy_max

(int a,

int b)

return a;

}void

find

(ll x)

//尋找最右端的葉節點

while(2

* r +

1<= n)

//這裡如果l <= r 即表示以x節點為根節點的

//樹為滿二叉樹,即只需要比較層數即可

//所以這裡也是去重操作,而且這裡到最後到達葉節點後

//作為遞迴終點,不然會一直遞迴下去

if(l <= r)

else

}int

main()

return0;

}

完全二叉堆

堆 heap 是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵完全二叉樹的陣列物件。由此可見,堆是樹與向量的結合體,其邏輯結構等同於完全二叉樹,而物理結構與向量相同。二叉堆具有結構性和堆序性,所謂結構性即其邏輯結構等同於完全二叉樹,而堆序性則是堆中任一節點都與其父節點有固定的大小關係...

二叉堆(完全二叉樹)

最小堆的實現 最小堆是一顆完全二叉樹 這裡用陣列實現完全二叉樹 index 0 1 2 3 4 5 6 value 空 a b c d 任意index,其父親為index 2,左兒子為2 index,右兒子為2 index 1 時間複雜度 o logn include includeusing na...

完全二叉樹

最近在看資料結構和演算法,這好多天沒碰幾乎全忘,搞乙個看到乙個完全二叉樹都算了半天,網上眾說紛紜啊,我還是以我的理解記錄一下給我做個記憶吧,以我這記憶力指不定以後又忘了。首先幾個概念 理想二叉樹,滿二叉樹,完全二叉樹。1 滿二叉樹 所有節點 除葉子 都有2個子節點,葉子節點都在一層,就是滿了的意思。...