題目鏈結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個子節點,葉子節點都在一層,就是滿了的意思。...