AcWing 3540. 二叉搜索树
原题链接
简单
作者:
尘轩
,
2024-04-18 09:26:11
,
所有人可见
,
阅读 5
c++代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int l[N], r[N], w[N], idx;
int root;//根节点下标(即根节点指针)
//创建BST(二叉搜索树)
//u传的是引用,用来动态更新数组l,r,w,以达到构建BST的目的
//u可以理解为当前子树根节点的下标(指针)
void insert(int& u, int x) {
if (!u) u = ++idx, w[u] = x;//构建BST的核心操作
else if (x < w[u]) insert(l[u], x);
else if (x > w[u]) insert(r[u], x);
}
void preorder(int u) {
if (!u) return;
cout << w[u] << " ";
preorder(l[u]);
preorder(r[u]);
}
void inorder(int u) {
if (!u) return;
inorder(l[u]);
cout << w[u] << " ";
inorder(r[u]);
}
void postorder(int u) {
if (!u) return;
postorder(l[u]);
postorder(r[u]);
cout << w[u] << " ";
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
insert(root, x);
}
preorder(root);
cout << endl;
inorder(root);
cout << endl;
postorder(root);
cout << endl;
return 0;
}