#include <iostream>
using namespace std;
struct tNode {
char data;
struct tNode *left;
struct tNode *right;
};
// Function to create a new node
tNode *newNode(char data) {
tNode *node = new tNode;
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
// Function to insert nodes in level order
tNode *insertLevelOrder(char arr[], tNode *root, int i, int n) {
// Base case for recursion
if (i < n) {
tNode *temp = newNode(arr[i]);
root = temp;
// insert left child
root->left = insertLevelOrder(arr, root->left, 2 * i + 1, n);
// insert right child
root->right = insertLevelOrder(arr, root->right, 2 * i + 2, n);
}
return root;
}
// Function to delete the given tree
void deleteTree(tNode *node) {
if (node == NULL)
return;
/* first delete both subtrees */
cout<<(node->data)<<" ";
deleteTree(node->left);
deleteTree(node->right);
/* then delete the node */
// std::cout << "Deleting node: " << node->data << std::endl;
delete node;
}
void preorder(tNode *node) {
if (node == NULL)
return;
/* first delete both subtrees */
cout<<(node->data)<<" ";
preorder(node->left);
preorder(node->right);
}
void inorder(tNode *node) {
if (node == NULL)
return;
/* first delete both subtrees */
inorder(node->left);
cout<<(node->data)<<" ";
inorder(node->right);
}
// Driver program to test above function
int main() {
int size = 3;
char arr[size]={'+','a','b'}; // Create an array of elements
tNode *root = insertLevelOrder(arr, root, 0, size);
inorder(root);
deleteTree(root);
root = NULL;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgdE5vZGUgewogIGNoYXIgZGF0YTsKICBzdHJ1Y3QgdE5vZGUgKmxlZnQ7CiAgc3RydWN0IHROb2RlICpyaWdodDsKfTsKCi8vIEZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBub2RlCnROb2RlICpuZXdOb2RlKGNoYXIgZGF0YSkgewogIHROb2RlICpub2RlID0gbmV3IHROb2RlOwogIG5vZGUtPmRhdGEgPSBkYXRhOwogIG5vZGUtPmxlZnQgPSBOVUxMOwogIG5vZGUtPnJpZ2h0ID0gTlVMTDsKICByZXR1cm4gbm9kZTsKfQoKLy8gRnVuY3Rpb24gdG8gaW5zZXJ0IG5vZGVzIGluIGxldmVsIG9yZGVyCnROb2RlICppbnNlcnRMZXZlbE9yZGVyKGNoYXIgYXJyW10sIHROb2RlICpyb290LCBpbnQgaSwgaW50IG4pIHsKICAvLyBCYXNlIGNhc2UgZm9yIHJlY3Vyc2lvbgogIGlmIChpIDwgbikgewogICAgdE5vZGUgKnRlbXAgPSBuZXdOb2RlKGFycltpXSk7CiAgICByb290ID0gdGVtcDsKCiAgICAvLyBpbnNlcnQgbGVmdCBjaGlsZAogICAgcm9vdC0+bGVmdCA9IGluc2VydExldmVsT3JkZXIoYXJyLCByb290LT5sZWZ0LCAyICogaSArIDEsIG4pOwoKICAgIC8vIGluc2VydCByaWdodCBjaGlsZAogICAgcm9vdC0+cmlnaHQgPSBpbnNlcnRMZXZlbE9yZGVyKGFyciwgcm9vdC0+cmlnaHQsIDIgKiBpICsgMiwgbik7CiAgfQogIHJldHVybiByb290Owp9CgovLyBGdW5jdGlvbiB0byBkZWxldGUgdGhlIGdpdmVuIHRyZWUKdm9pZCBkZWxldGVUcmVlKHROb2RlICpub2RlKSB7CiAgaWYgKG5vZGUgPT0gTlVMTCkKICAgIHJldHVybjsKCiAgLyogZmlyc3QgZGVsZXRlIGJvdGggc3VidHJlZXMgKi8KICBjb3V0PDwobm9kZS0+ZGF0YSk8PCIgIjsKICBkZWxldGVUcmVlKG5vZGUtPmxlZnQpOwogIGRlbGV0ZVRyZWUobm9kZS0+cmlnaHQpOwoKICAvKiB0aGVuIGRlbGV0ZSB0aGUgbm9kZSAqLwogIC8vIHN0ZDo6Y291dCA8PCAiRGVsZXRpbmcgbm9kZTogIiA8PCBub2RlLT5kYXRhIDw8IHN0ZDo6ZW5kbDsKICBkZWxldGUgbm9kZTsKfQp2b2lkIHByZW9yZGVyKHROb2RlICpub2RlKSB7CiAgaWYgKG5vZGUgPT0gTlVMTCkKICAgIHJldHVybjsKICAvKiBmaXJzdCBkZWxldGUgYm90aCBzdWJ0cmVlcyAqLwogIGNvdXQ8PChub2RlLT5kYXRhKTw8IiAiOwogIHByZW9yZGVyKG5vZGUtPmxlZnQpOwogIHByZW9yZGVyKG5vZGUtPnJpZ2h0KTsKfQp2b2lkIGlub3JkZXIodE5vZGUgKm5vZGUpIHsKICBpZiAobm9kZSA9PSBOVUxMKQogICAgcmV0dXJuOwogIC8qIGZpcnN0IGRlbGV0ZSBib3RoIHN1YnRyZWVzICovCiAgaW5vcmRlcihub2RlLT5sZWZ0KTsKICBjb3V0PDwobm9kZS0+ZGF0YSk8PCIgIjsKICBpbm9yZGVyKG5vZGUtPnJpZ2h0KTsKfQovLyBEcml2ZXIgcHJvZ3JhbSB0byB0ZXN0IGFib3ZlIGZ1bmN0aW9uCmludCBtYWluKCkgewogIGludCBzaXplID0gMzsKICBjaGFyIGFycltzaXplXT17JysnLCdhJywnYid9OyAvLyBDcmVhdGUgYW4gYXJyYXkgb2YgZWxlbWVudHMKICAKICB0Tm9kZSAqcm9vdCA9IGluc2VydExldmVsT3JkZXIoYXJyLCByb290LCAwLCBzaXplKTsKICBpbm9yZGVyKHJvb3QpOwogIGRlbGV0ZVRyZWUocm9vdCk7CiAgcm9vdCA9IE5VTEw7CgogIHJldHVybiAwOwp9