//(c)Terminator
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
typedef struct _bstree {
int val;
struct _bstree* left;
struct _bstree* right;
} bstree;
static int add(bstree** tr, int n);
static void clear(bstree* tr);
static void print(FILE* _o, const bstree* p, int n);
int main(void){
int i;
bstree* tr = NULL;
for(i = 0; i < 20; ++i)
add(&tr, rand() % 40);
print(stdout, tr, 20);
clear(tr);
return 0;
}
//добавление элемента в дерево
static int add(bstree** tr, int n){
bstree* p = *tr;
while(p != NULL){
if(n < p->val){
tr = &p->left;
p = p->left;
} else {
if(n == p->val)
return 0;
tr = &p->right;
p = p->right;
}
}
p = (bstree*)malloc(sizeof(bstree));
if(p != NULL){
p->left = p->right = NULL;
p->val = n;
*tr = p;
}
return (p != NULL);
}
//удаление всего дерева
static void clear(bstree* tr){
if(tr != NULL){
if(tr->left != NULL)
clear(tr->left);
if(tr->right != NULL)
clear(tr->right);
free(tr);
}
}
static void print(FILE* _o, const bstree* p, int n){
int i;
if(p != NULL){
for(i = 0; i <= n; ++i)
fputc(' ', _o);
fprintf(_o, "%d\n", p->val);
if(p->left != NULL)
print(_o, p->left, n - 1);
if(p->right != NULL)
print(_o, p->right, n + 1);
}
}
Ly8oYylUZXJtaW5hdG9yCiNpbmNsdWRlIDxzdGRpby5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxtYWxsb2MuaD4KCgp0eXBlZGVmIHN0cnVjdCBfYnN0cmVlIHsKCWludCB2YWw7CglzdHJ1Y3QgX2JzdHJlZSogbGVmdDsKCXN0cnVjdCBfYnN0cmVlKiByaWdodDsKfSBic3RyZWU7CgpzdGF0aWMgaW50ICBhZGQoYnN0cmVlKiogdHIsIGludCBuKTsKc3RhdGljIHZvaWQgY2xlYXIoYnN0cmVlKiB0cik7CnN0YXRpYyB2b2lkIHByaW50KEZJTEUqIF9vLCBjb25zdCBic3RyZWUqIHAsIGludCBuKTsKCgppbnQgbWFpbih2b2lkKXsKCWludCBpOwoJYnN0cmVlKiB0ciA9IE5VTEw7CgkKCWZvcihpID0gMDsgaSA8IDIwOyArK2kpCgkJYWRkKCZ0ciwgcmFuZCgpICUgNDApOwoKCXByaW50KHN0ZG91dCwgdHIsIDIwKTsKCWNsZWFyKHRyKTsKCXJldHVybiAwOwp9CgoKCi8v0LTQvtCx0LDQstC70LXQvdC40LUg0Y3Qu9C10LzQtdC90YLQsCDQsiDQtNC10YDQtdCy0L4Kc3RhdGljIGludCBhZGQoYnN0cmVlKiogdHIsIGludCBuKXsKCWJzdHJlZSogcCA9ICp0cjsKCXdoaWxlKHAgIT0gTlVMTCl7CgkJaWYobiA8IHAtPnZhbCl7CgkJCXRyID0gJnAtPmxlZnQ7CgkJCXAgID0gcC0+bGVmdDsKCQl9IGVsc2UgewoJCQlpZihuID09IHAtPnZhbCkKCQkJCXJldHVybiAwOwoJCQl0ciA9ICZwLT5yaWdodDsKCQkJcCAgPSBwLT5yaWdodDsKCQl9Cgl9CgoJcCA9IChic3RyZWUqKW1hbGxvYyhzaXplb2YoYnN0cmVlKSk7CglpZihwICE9IE5VTEwpewoJCXAtPmxlZnQgPSBwLT5yaWdodCA9IE5VTEw7CgkJcC0+dmFsICA9IG47CgkJKnRyID0gcDsKCX0KCXJldHVybiAocCAhPSBOVUxMKTsKfQoKCi8v0YPQtNCw0LvQtdC90LjQtSDQstGB0LXQs9C+INC00LXRgNC10LLQsApzdGF0aWMgdm9pZCBjbGVhcihic3RyZWUqIHRyKXsKCWlmKHRyICE9IE5VTEwpewoJCWlmKHRyLT5sZWZ0ICE9IE5VTEwpCgkJCWNsZWFyKHRyLT5sZWZ0KTsKCQlpZih0ci0+cmlnaHQgIT0gTlVMTCkKCQkJY2xlYXIodHItPnJpZ2h0KTsKCQlmcmVlKHRyKTsKCX0KfQoKCnN0YXRpYyB2b2lkIHByaW50KEZJTEUqIF9vLCBjb25zdCBic3RyZWUqIHAsIGludCBuKXsKCWludCBpOwoJaWYocCAhPSBOVUxMKXsKCQlmb3IoaSA9IDA7IGkgPD0gbjsgKytpKQoJCQlmcHV0YygnICcsIF9vKTsKCQlmcHJpbnRmKF9vLCAiJWRcbiIsIHAtPnZhbCk7CgoJCWlmKHAtPmxlZnQgIT0gTlVMTCkKCQkJcHJpbnQoX28sIHAtPmxlZnQsIG4gLSAxKTsKCQlpZihwLT5yaWdodCAhPSBOVUxMKQoJCQlwcmludChfbywgcC0+cmlnaHQsIG4gKyAxKTsKCX0KfQo=