数据结构 --- 二叉搜索树

静态建树,层数较小

memset(a,-1,sizeof a)//初始化静态数组a,所有值为-1(防止题目有值为0,导致冲突)
void build(){
	mm(a,-1);
	int x;
	for(int i = 0; i < n; i ++ ){
		cin >> x;
		idx = 1;
		while(1){
			if(a[idx] == -1){
				a[idx] = x;
				break;
			}else if(x < a[idx]) idx *= 2;
			else idx = 2 * idx + 1;
		}
	}
}

存放二叉搜索树的左右儿子结点,静态建树

int n;
int a[N];
int l[N],r[N];
int d[N],dep = 1;
mm(l,-1);mm(r,-1);
void add(int root,int i,int level){
	if(a[i] <= a[root]){
		if(l[root] == -1){
			l[root] = i;
			d[level] ++;
			dep = max(level,dep);
			return ;
		}else add(l[root],i,level + 1);
	}else{
		if(r[root] == -1){
			r[root] = i;
			d[level] ++;
			dep = max(level,dep);
			return ;
		}else add(r[root],i,level + 1);
	}
}
原文地址:https://www.cnblogs.com/bingers/p/14044560.html