二叉搜索树前驱后继打废了,求调
  • 板块学术版
  • 楼主ka_da_Duck
  • 当前回复11
  • 已保存回复11
  • 发布时间2024/1/28 09:18
  • 上次更新2024/1/28 11:07:20
查看原帖
二叉搜索树前驱后继打废了,求调
1088058
ka_da_Duck楼主2024/1/28 09:18
#include <bits/stdc++.h>

using namespace std;
const int maxn = 1e3 + 10;

struct Node {
	int val, cnt;
	int lc, rc, fa;
}tree[maxn];

int tot = 0;
int create(int x, int fa) {
	tree[++tot] = {x, 1, 0, 0, fa};
	return tot;
}

void insert(int &u, int x) {
	if (!u) {
		u = create(x, u);
		return;
	} 
	if (x == tree[u].val) {
		tree[u].cnt++;
		return;
	} else if (x < tree[u].val) insert(tree[u].lc, x);
	else insert(tree[u].rc, x);
}

int getpre(int u) {
	if (tree[u].lc) {
		u = tree[u].lc;
		while (tree[u].rc) u = tree[u].rc;
		return tree[u].val;
	} else {
		while (tree[u].fa && tree[tree[u].fa].lc == u) u = tree[u].fa;
		return tree[tree[u].fa].val;
	}
}

int getnxt(int u) {
	if (tree[u].rc) {
		u = tree[u].rc;
		while (tree[u].lc) u = tree[u].lc;
		return tree[u].val;
	} else {
		while (tree[u].fa && tree[tree[u].fa].rc == u) u = tree[u].fa;
		return tree[tree[u].fa].val;
	}
}

int n, rt, x;

void dfs(int u, int x) {
	if (tree[u].val == x) {
		cout << getpre(u) << '\n' << getnxt(u) << '\n';
		exit(0);
	} else if (tree[u].val < x) dfs(tree[u].rc, x);
	else dfs(tree[u].lc, x);
}

signed main() {
	cin >> n;
	for (int i = 1; i <= n; ++i) {
		scanf("%d", &x);
		insert(rt, x);
	}
	cin >> x;
	dfs(rt, x);
}
2024/1/28 09:18
加载中...