乙個以1為根的帶權二叉樹,每個點都有個權值 vi
v i。
求每乙個點的左右關聯點個數。
倍增快速跳即可,**如下:
#include
using
namespace
std;
#define r register
#define maxn 1000005
int n,v[maxn],lson[maxn],rson[maxn];
int f[maxn][20],ans[maxn][2];
template
inline
void read(r rme &x)
int main()
for (r int i=1;i<=n;++i)
for (r int i=1;i<=n;++i) printf("%d %d\n",ans[i][0],ans[i][1]);
return
0;}
問題一中的 vb
v
b全部替換成 va
v
a.。
簡單推一下即可,不會爆棧。
**如下:
#include
using namespace std;
#define r register
#define maxn 1000005
int tesc;
int next_int()
int n,v[maxn],lson[maxn],rson[maxn],dep[maxn],cnt[maxn],ans[maxn][2];
void dfs(r int pos)
if(rson[pos])
}int main()
printf("%d %d\n",a,b);
return 0;
}
血的教訓:
倍增注意for的順序,先for0-32!
for (r int j=1;j
<=18;++j)
for (r int i=1;i
<=n;++i)
就這玩意兒調了我一晚上。。 合併兩個二叉樹
給定兩個二叉樹,想象當你將它們中的乙個覆蓋到另乙個上時,兩個二叉樹的一些節點便會重疊。你需要將他們合併為乙個新的二叉樹。合併的規則是如果兩個節點重疊,那麼將他們的值相加作為節點合併後的新值,否則不為 null 的節點將直接作為新二叉樹的節點。示例 1 輸入 tree 1 tree 2 1 2 3 2...
二叉樹問題 尋找搜尋二叉樹中兩個錯誤的節點
題目 一棵二叉樹原本是搜尋二叉樹,但是其中有兩個節點調換了位置,使得這棵二叉樹不再是搜尋二叉樹,請找出這兩個錯誤的節點並返回。已知二叉樹中所有節點的值都不一樣,給定二叉樹的頭節點,返回乙個長度為2的二叉樹節點型別的陣列errs。def gettwoerrornode root errs none f...
二叉樹的建立以及兩個二叉樹比較異同
關於二叉樹的建構函式 在主調函式中並不宣告號指標所指向的空間,在被調函式中可以直接使用。二叉樹的定義,以及比較 include using namespace std 二叉樹的二叉鍊錶的節點定義 typedef struct bitnode bitnode,bitree 建立二叉樹 若該節點的資料為...