二叉查找树 建树 遍历

🐕都不用链表写

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<math.h>
#define YURI 赛高
#define N 100005
int n,a[N],ls[N],rs[N],dep[N],idx;
void insert(int u,int val) {
	if(val<a[u]) {
		if(ls[u])insert(ls[u],val);
		else {
			idx++;
			a[idx]=val;
			ls[u]=idx;
			return ;
		}
	}
	if(val>=a[u]) {
		if(rs[u])insert(rs[u],val);
		else {
			idx++;
			a[idx]=val;
			rs[u]=idx;
			return ;
		}
	}
}
void dfs(int u,int fat) {
	dep[u]=dep[fat]+1;
	if(ls[u]==0&&rs[u]==0) {
		printf("%d %d\n",a[u],dep[u]);
		return ;
	}
	if(ls[u])dfs(ls[u],u);
	if(rs[u])dfs(rs[u],u);
}
signed main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {
		int x;
		scanf("%d",&x);
		if(!idx) {
			idx++;
			a[1]=x;
		} else insert(1,x);
	}
//	for(int i=1;i<=idx;i++)printf("%d ",a[i]);printf("\n\n\n");
	dfs(1,0);
	return 1+1==3;
}
posted @ 2023-05-04 19:48  N0zoM1z0  阅读(7)  评论(0编辑  收藏  举报