#include <bits/stdc++.h>
using namespace std;
struct node
{
int data;
struct node *left;
struct node *right;
};
struct node* add(int x)
{
struct node *temp = ( struct node *) malloc(sizeof(struct node));
temp->data = x;
temp->left = NULL;
temp->right = NULL;
return temp;
};
void leave( struct node *root )
{
if ( root != NULL ) {
if ( root->left == NULL && root->right == NULL ){
cout << root->data << " ";
}
leave(root->left);
leave(root->right);
}
}
void boundary_l( struct node *root)
{
if ( root != NULL ) {
if ( root->left == NULL && root->right == NULL ) {
return;
}
cout << root->data <<" ";
boundary_l(root->left);
boundary_l(root->right);
}
return;
}
void boundary_r(struct node *root)
{
if ( root != NULL ) {
if ( root->left == NULL && root->right == NULL ) {
return;
}
boundary_l(root->right);
boundary_l(root->left);
cout << root->data <<" ";
}
return;
}
void boundary( struct node *root)
{
if ( root != NULL ) {
cout << root->data << " ";
boundary_l(root->left);
leave(root->left);
leave(root->right);
boundary_r(root->right);
}
}
int main()
{
struct node *root = NULL;
root = add(1);
root->left = add(2);
root->right = add(3);
root->left->left = add(4);
root->left->right = add(5);
root->right->left = add(6);
root->right->right = add(7);
boundary(root);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IG5vZGUKewogICAgaW50IGRhdGE7CiAgICBzdHJ1Y3Qgbm9kZSAqbGVmdDsKICAgIHN0cnVjdCBub2RlICpyaWdodDsKfTsKCnN0cnVjdCBub2RlKiBhZGQoaW50IHgpCnsKICAgICBzdHJ1Y3Qgbm9kZSAqdGVtcCA9ICggc3RydWN0IG5vZGUgKikgbWFsbG9jKHNpemVvZihzdHJ1Y3Qgbm9kZSkpOwogICAgIHRlbXAtPmRhdGEgPSB4OwogICAgIHRlbXAtPmxlZnQgPSBOVUxMOwogICAgIHRlbXAtPnJpZ2h0ID0gTlVMTDsKICAgICByZXR1cm4gdGVtcDsKCn07Cgp2b2lkIGxlYXZlKCBzdHJ1Y3Qgbm9kZSAqcm9vdCApCnsKCiAgICBpZiAoIHJvb3QgIT0gTlVMTCApIHsKCiAgICAgICAgIGlmICggcm9vdC0+bGVmdCA9PSBOVUxMICYmIHJvb3QtPnJpZ2h0ID09IE5VTEwgICl7CiAgICAgICAgICAgIGNvdXQgPDwgcm9vdC0+ZGF0YSA8PCAiICI7CiAgICAgICAgIH0KICAgICAgICAgbGVhdmUocm9vdC0+bGVmdCk7CiAgICAgICAgIGxlYXZlKHJvb3QtPnJpZ2h0KTsKICAgIH0KCn0Kdm9pZCBib3VuZGFyeV9sKCBzdHJ1Y3Qgbm9kZSAqcm9vdCkKewogICAgaWYgKCByb290ICE9IE5VTEwgKSB7CgogICAgICAgIGlmICggcm9vdC0+bGVmdCA9PSBOVUxMICYmIHJvb3QtPnJpZ2h0ID09IE5VTEwgKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY291dCA8PCByb290LT5kYXRhIDw8IiAgIjsKICAgICAgICBib3VuZGFyeV9sKHJvb3QtPmxlZnQpOwogICAgICAgIGJvdW5kYXJ5X2wocm9vdC0+cmlnaHQpOwoKICAgIH0KICAgIHJldHVybjsKfQp2b2lkIGJvdW5kYXJ5X3Ioc3RydWN0IG5vZGUgKnJvb3QpCnsKICAgIGlmICggcm9vdCAhPSBOVUxMICkgewoKICAgICAgICBpZiAoIHJvb3QtPmxlZnQgPT0gTlVMTCAmJiByb290LT5yaWdodCA9PSBOVUxMICkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBib3VuZGFyeV9sKHJvb3QtPnJpZ2h0KTsKICAgICAgICBib3VuZGFyeV9sKHJvb3QtPmxlZnQpOwogICAgICAgIGNvdXQgPDwgcm9vdC0+ZGF0YSA8PCIgICI7CiAgICB9CiAgICByZXR1cm47Cgp9Cgp2b2lkIGJvdW5kYXJ5KCBzdHJ1Y3Qgbm9kZSAqcm9vdCkKewoKICAgIGlmICggcm9vdCAhPSBOVUxMICkgewogICAgICAgIGNvdXQgPDwgcm9vdC0+ZGF0YSA8PCAiICI7CiAgICAgICAgYm91bmRhcnlfbChyb290LT5sZWZ0KTsKICAgICAgICBsZWF2ZShyb290LT5sZWZ0KTsKICAgICAgICBsZWF2ZShyb290LT5yaWdodCk7CiAgICAgICAgYm91bmRhcnlfcihyb290LT5yaWdodCk7CiAgICB9Cgp9CgppbnQgbWFpbigpCnsKCiAgICAgc3RydWN0IG5vZGUgKnJvb3QgPSBOVUxMOwoKICAgICByb290ID0gYWRkKDEpOwogICAgIHJvb3QtPmxlZnQgPSBhZGQoMik7CiAgICAgcm9vdC0+cmlnaHQgPSBhZGQoMyk7CiAgICAgcm9vdC0+bGVmdC0+bGVmdCA9IGFkZCg0KTsKICAgICByb290LT5sZWZ0LT5yaWdodCA9IGFkZCg1KTsKICAgICByb290LT5yaWdodC0+bGVmdCA9IGFkZCg2KTsKICAgICByb290LT5yaWdodC0+cmlnaHQgPSBhZGQoNyk7CgogICAgYm91bmRhcnkocm9vdCk7CiAgICByZXR1cm4gMDsKfQo=