生活随笔
收集整理的這篇文章主要介紹了
线段树的基本实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
線段樹是這樣一種結構,每個節點存儲數組一部分的和
原數組為
對應的線段樹結構如下
根節點是數組之和,根節點的左孩子是數組左半部分之和,根節點的右孩子是數組右半部分數值之和。
#include<iostream>
#define MAX_LEN 1000using namespace std
;void build_tree(int arr
[],int tree
[],int node
,int start
,int end
){if(start
==end
){tree
[node
]=arr
[start
];return;}int mid
=(start
+end
)/2;int left_node
=2*node
+1;int right_node
=2*node
+2;build_tree(arr
,tree
,left_node
,start
,mid
);build_tree(arr
,tree
,right_node
,mid
+1,end
);tree
[node
]=tree
[left_node
]+tree
[right_node
];}int main(){int arr
[]={1,3,5,7,9,11};int size
=6;int tree
[MAX_LEN
]={0};build_tree(arr
,tree
,0,0,size
-1);for(int i
=0;i
<15;i
++){cout
<<"tree["<<i
<<"]: "<<tree
[i
]<<endl
;}return 0;}
結果
總結
以上是生活随笔為你收集整理的线段树的基本实现的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。