---
tags: codebook
---
{%hackmd theme-dark %}
# shortest bst
```cpp=
#include<iostream>
```
```cpp=
template<typename T>struct bst{bst():rt(0){}
bst(const auto& v):rt(0){for(const T& i:v) insert(i);}
struct nd{T k;nd*p[2];nd(const T& x):k(x){p[0]=p[1]=0;}}*rt;
void is(const T&x,nd*&c){
if(c){is(x,c->p[c->k<x]);}else c=new nd(x);
}void insert(const T& x){is(x,rt);}
void pt(auto& o,nd*c){if(!c){return;}
pt(o,c->p[0]);o<<c->k<<' ';pt(o,c->p[1]);
}void print(auto& o){pt(o,rt);o<<std::endl;}};
```
---
```cpp=
#include<iostream>
```
```cpp=
template<typename T> struct bst {
bst(auto&& v = {}): r(0) {for (const T& i : v) inser(i);}
struct n {T k; n*p[2]; n(const T& x): k(x) {p[0] = p[1] = 0;}} *r;
void i(const T&x, n*&c) {
if (c) i(x, c->p[c->k < x]); else c = new n(x);
} void inser(const T& x) {i(x, r);}
void pt(auto& o, n*c) {
if (c) pt(o, c->p[0]), o << c->k << ' ', pt(o, c->p[1]);
} void print(auto& o) {pt(o, r), o << std::endl;}};
```
```cpp=
#include<vector>
int main() {
bst<int> tree(std::vector<int> {1, 5, 4, 3, 2});
tree.print(std::cout);
return 0;
}
```