#include <bits/stdc++.h>
#include <iostream>
#include <stl>
using namespace std;
struct Node
{
int data;
Node *left, *right;
};
Node* newNode(int key)
{
Node* node = new Node;
node->data = key;
node->left = node->right = nullptr;
return node;
}
Node *createTree(int parent[], int n)
{
unordered_map<int, Node*> namaTree;
// create n new tree nodes each having value from 0 to n-1
// and store them in a map
for (int i = 0; i < n; i++)
namaTree[i] = newNode(i);
// represents root node of binary tree
Node *root = nullptr;
// traverse the parent array and build the tree
for (int i = 0; i < n; i++)
{
// if parent is -1, set root to current node having
// value i (stored in map[i])
if (parent[i] == -1)
root = namaTree[i];
else
{
// get parent node for current node
Node *ptr = map[parent[i]];
// if parent's left child is filled, map the node to its right child
if (ptr->left)
ptr->right = map[i];
// if parent's left child is empty, map the node to it
else
ptr->left = namaTree[i];
}
}
// return root of the constructed tree
return root;
}
void inorder(Node *root)
{
if (root == nullptr)
return;
inorder(root->left);
cout << root->data << " ";
inorder(root->right);
}
// main function
int main()
{
int arr[10];
for(int i=0; i <10; i++){
cin >> arr[i];}
int n = sizeof arr / sizeof arr[0];
Node *root = createTree(arr, n);
inorder(root);
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHN0bD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBOb2RlCnsKCWludCBkYXRhOwoJTm9kZSAqbGVmdCwgKnJpZ2h0Owp9OwoKTm9kZSogbmV3Tm9kZShpbnQga2V5KQp7CglOb2RlKiBub2RlID0gbmV3IE5vZGU7Cglub2RlLT5kYXRhID0ga2V5OwoJbm9kZS0+bGVmdCA9IG5vZGUtPnJpZ2h0ID0gbnVsbHB0cjsKCglyZXR1cm4gbm9kZTsKfQoKTm9kZSAqY3JlYXRlVHJlZShpbnQgcGFyZW50W10sIGludCBuKQp7Cgl1bm9yZGVyZWRfbWFwPGludCwgTm9kZSo+IG5hbWFUcmVlOwoKCS8vIGNyZWF0ZSBuIG5ldyB0cmVlIG5vZGVzIGVhY2ggaGF2aW5nIHZhbHVlIGZyb20gMCB0byBuLTEKCS8vIGFuZCBzdG9yZSB0aGVtIGluIGEgbWFwCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCQluYW1hVHJlZVtpXSA9IG5ld05vZGUoaSk7CgoJLy8gcmVwcmVzZW50cyByb290IG5vZGUgb2YgYmluYXJ5IHRyZWUKCU5vZGUgKnJvb3QgPSBudWxscHRyOwoKCS8vIHRyYXZlcnNlIHRoZSBwYXJlbnQgYXJyYXkgYW5kIGJ1aWxkIHRoZSB0cmVlCglmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKCXsKCQkvLyBpZiBwYXJlbnQgaXMgLTEsIHNldCByb290IHRvIGN1cnJlbnQgbm9kZSBoYXZpbmcKCQkvLyB2YWx1ZSBpIChzdG9yZWQgaW4gbWFwW2ldKQoJCWlmIChwYXJlbnRbaV0gPT0gLTEpCgkJCXJvb3QgPSBuYW1hVHJlZVtpXTsKCQllbHNlCgkJewoJCQkvLyBnZXQgcGFyZW50IG5vZGUgZm9yIGN1cnJlbnQgbm9kZQoJCQlOb2RlICpwdHIgPSBtYXBbcGFyZW50W2ldXTsKCgkJCS8vIGlmIHBhcmVudCdzIGxlZnQgY2hpbGQgaXMgZmlsbGVkLCBtYXAgdGhlIG5vZGUgdG8gaXRzIHJpZ2h0IGNoaWxkCgkJCWlmIChwdHItPmxlZnQpCgkJCQlwdHItPnJpZ2h0ID0gbWFwW2ldOwoKCQkJLy8gaWYgcGFyZW50J3MgbGVmdCBjaGlsZCBpcyBlbXB0eSwgbWFwIHRoZSBub2RlIHRvIGl0CgkJCWVsc2UKCQkJCXB0ci0+bGVmdCA9IG5hbWFUcmVlW2ldOwoJCX0KCX0KCQoKCS8vIHJldHVybiByb290IG9mIHRoZSBjb25zdHJ1Y3RlZCB0cmVlCglyZXR1cm4gcm9vdDsKfQoKdm9pZCBpbm9yZGVyKE5vZGUgKnJvb3QpCnsKCWlmIChyb290ID09IG51bGxwdHIpCgkJcmV0dXJuOwoKCWlub3JkZXIocm9vdC0+bGVmdCk7Cgljb3V0IDw8IHJvb3QtPmRhdGEgPDwgIiAiOwoJaW5vcmRlcihyb290LT5yaWdodCk7Cn0KCgoKLy8gbWFpbiBmdW5jdGlvbgppbnQgbWFpbigpCnsKCWludCBhcnJbMTBdOwoJZm9yKGludCBpPTA7IGkgPDEwOyBpKyspewoJY2luID4+IGFycltpXTt9CglpbnQgbiA9IHNpemVvZiBhcnIgLyBzaXplb2YgYXJyWzBdOwoKCU5vZGUgKnJvb3QgPSBjcmVhdGVUcmVlKGFyciwgbik7CgoJaW5vcmRlcihyb290KTsKCglyZXR1cm4gMDsKfQo=