#include <iostream>
struct node {
int data;
struct node *left;
struct node *right;
};
void add_node(struct node *&root, int data) {
if (root == 0) {
root = new struct node;
root->data = data;
root->left = root->right = 0;
return;
}
if (data < root->data)
add_node(root->left, data);
else
add_node(root->right, data);
}
constexpr int N = 4;
void vomit_tree(struct node *root, int c) {
if (root == 0)
return;
vomit_tree(root->left, c + N);
for (int i = 0; i < c; i++) std::cout << ' ';
std::cout << root->data << std::endl;
vomit_tree(root->right, c + N);
}
void release_tree(struct node *&root) {
if (root == 0)
return;
release_tree(root->left);
release_tree(root->right);
delete root;
root = 0;
}
int main() {
struct node *root = 0;
add_node(root, 50);
add_node(root, 20);
add_node(root, 70);
add_node(root, 10);
add_node(root, 25);
add_node(root, 65);
add_node(root, 80);
add_node(root, 8);
add_node(root, 12);
add_node(root, 62);
add_node(root, 75);
add_node(root, 90);
vomit_tree(root, 0);
release_tree(root);
return 0;
}
/* end */
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IG5vZGUgewogIGludCBkYXRhOwogIHN0cnVjdCBub2RlICpsZWZ0OwogIHN0cnVjdCBub2RlICpyaWdodDsKfTsKCnZvaWQgYWRkX25vZGUoc3RydWN0IG5vZGUgKiZyb290LCBpbnQgZGF0YSkgewogIGlmIChyb290ID09IDApIHsKICAgIHJvb3QgPSBuZXcgc3RydWN0IG5vZGU7CiAgICByb290LT5kYXRhID0gZGF0YTsKICAgIHJvb3QtPmxlZnQgPSByb290LT5yaWdodCA9IDA7CiAgICByZXR1cm47CiAgfQoKICBpZiAoZGF0YSA8IHJvb3QtPmRhdGEpCiAgICBhZGRfbm9kZShyb290LT5sZWZ0LCBkYXRhKTsKICBlbHNlCiAgICBhZGRfbm9kZShyb290LT5yaWdodCwgZGF0YSk7Cn0KCmNvbnN0ZXhwciBpbnQgTiA9IDQ7CnZvaWQgdm9taXRfdHJlZShzdHJ1Y3Qgbm9kZSAqcm9vdCwgaW50IGMpIHsKICBpZiAocm9vdCA9PSAwKQogICAgcmV0dXJuOwogIHZvbWl0X3RyZWUocm9vdC0+bGVmdCwgYyArIE4pOwogIGZvciAoaW50IGkgPSAwOyBpIDwgYzsgaSsrKSBzdGQ6OmNvdXQgPDwgJyAnOwogIHN0ZDo6Y291dCA8PCByb290LT5kYXRhIDw8IHN0ZDo6ZW5kbDsKICB2b21pdF90cmVlKHJvb3QtPnJpZ2h0LCBjICsgTik7Cn0KCnZvaWQgcmVsZWFzZV90cmVlKHN0cnVjdCBub2RlIComcm9vdCkgewogIGlmIChyb290ID09IDApCiAgICByZXR1cm47CiAgcmVsZWFzZV90cmVlKHJvb3QtPmxlZnQpOwogIHJlbGVhc2VfdHJlZShyb290LT5yaWdodCk7CiAgZGVsZXRlIHJvb3Q7CiAgcm9vdCA9IDA7Cn0KCmludCBtYWluKCkgewogIHN0cnVjdCBub2RlICpyb290ID0gMDsKICBhZGRfbm9kZShyb290LCA1MCk7CiAgYWRkX25vZGUocm9vdCwgMjApOwogIGFkZF9ub2RlKHJvb3QsIDcwKTsKICBhZGRfbm9kZShyb290LCAxMCk7CiAgYWRkX25vZGUocm9vdCwgMjUpOwogIGFkZF9ub2RlKHJvb3QsIDY1KTsKICBhZGRfbm9kZShyb290LCA4MCk7CiAgYWRkX25vZGUocm9vdCwgOCk7CiAgYWRkX25vZGUocm9vdCwgMTIpOwogIGFkZF9ub2RlKHJvb3QsIDYyKTsKICBhZGRfbm9kZShyb290LCA3NSk7CiAgYWRkX25vZGUocm9vdCwgOTApOwoKICB2b21pdF90cmVlKHJvb3QsIDApOwoKICByZWxlYXNlX3RyZWUocm9vdCk7CiAgcmV0dXJuIDA7Cn0KLyogZW5kICovCg==