#include#defineMaxSize1000typedefcharElemType;typedefstructnode{inti,j;intcover;struc">
線段樹的簡單實現

線段樹的簡單實現

ID:38746574

大?。?1.50 KB

頁數:20頁

時間:2019-06-18

線段樹的簡單實現_第1頁
線段樹的簡單實現_第2頁
線段樹的簡單實現_第3頁
線段樹的簡單實現_第4頁
線段樹的簡單實現_第5頁
資源描述:

《線段樹的簡單實現》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。

1、線段樹的簡單實現:#include#include#defineMaxSize1000typedefcharElemType;typedefstructnode{inti,j;intcover;structnode*lchild,*rchild;}ITree;//建立線段樹ITree*CreateTree(inta,intb){ITree*r;if(bi=a;r->j=b;r->cove

2、r=0;if(b-a>1){r->lchild=CreateTree(a,(a+b)/2);r->rchild=CreateTree((a+b)/2,b);}elser->lchild=r->rchild=NULL;returnr;}//線段樹的插入voidInsTree(ITree*r,inta,intb){intmid;if(a<=r->i&&r->j<=b)r->cover++;else{mid=(r->i+r->j)/2;if(b<=mid)InsTree(r->lchild,a,b);elseif(mid<=

3、a)InsTree(r->rchild,a,b);else{InsTree(r->lchild,a,mid);InsTree(r->rchild,mid,b);}}}//線段樹的刪除voidDelTree(ITree*r,inta,intb){intmid;if(a<=r->i&&r->j<=b)r->cover--;else{mid=(r->i+r->j)/2;if(b<=mid)DelTree(r->lchild,a,b);elseif(mid<=a)DelTree(r->rchild,a,b);else{DelT

4、ree(r->lchild,a,mid);DelTree(r->rchild,mid,b);}}}//計算線段樹的測度intCount(ITree*r){if(r->cover>0)returnr->j-r->i;elseif(r->j-r->i==1)return0;elsereturnCount(r->lchild)+Count(r->rchild);}//主函數intmain(){ITree*r;inta,b,a1,b1,a2,b2,a3,b3,n,i;printf("請輸入線段樹的區(qū)間端點:");while(s

5、canf("%d%d",&a,&b)!=EOF){r=CreateTree(a,b);printf("請輸入插入3條線段的區(qū)間端點:");scanf("%d%d%d%d%d%d",&a1,&b1,&a2,&b2,&a3,&b3);InsTree(r,a1,b1);InsTree(r,a2,b2);InsTree(r,a3,b3);printf("插入3條線段后線段樹的測度為%d",Count(r));printf("請輸入刪除2條線段的區(qū)間端點:");scanf("%d%d%d%d",&a1,&b1,&a2,&b2

6、);DelTree(r,a1,b1);DelTree(r,a2,b2);printf("刪除2條線段后線段樹的測度為%d",Count(r));printf("請輸入線段樹的區(qū)間端點:");}return0;}pku2528(離散化+線段樹)2010-03-1616:42#include#includeusingnamespacestd;structnode{intleft,right;intcount;}tree[160020];intposter[10003][2]

7、;intflag[20003];inthash[10000003];//hash函數。intsum;intcmp(constvoid*a,constvoid*b){return*(int*)a-*(int*)b;}voidBuild(intk,inti,intj)//利用完全二叉樹建樹。{tree[k].left=i;tree[k].right=j;tree[k].count=0;if(i!=j){intmid=(i+j)/2;Build(2*k,i,mid);Build(2*k+1,mid+1,j);}return;

8、}voidInsert(inti,intcolor,intfrom,intto){if(tree[i].left==from&&tree[i].right==to){tree[i].count=color;return;}if(tree[i].count==color)return;if(tree[i].count!=-1&&tr

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯系客服處理。