自己在网上重新学习了线段树之后,写了一下线段树的比较标准的写法,包含测试的过程。
#include <stdio.h>
// 线段树的最大结点数,可根据具体题目进行更改
#define MAX_LEN 1000
// 递归建立线段树
// arr: 存放原始数据的数组
// tree: 存放线段树的数组
// node: 当前遍历的结点
// tree[node]表示的是原始数组中start到end范围内的数字的和(包含start和end所在位置)
void build_tree(int arr[], int tree[], int node, int start, int end) {
if (start == end) {
tree[node] = arr[start];
} else {
int left_node = 2 * node + 1;
int right_node = 2 * node + 2;
int mid = (start + end) / 2;
build_tree(arr, tree, left_node, start, mid);
build_tree(arr, tree, right_node, mid + 1, end);
tree