#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
#include <algorithm>
using namespace std;
typedef struct treeNode {
treeNode *leftChild;
treeNode *rightChild;
int data;
} treeNode;
void printTree(treeNode*);
int getNodeDepth(treeNode*);
treeNode* insert(treeNode*, int);
treeNode* createNewNode(int);
int main()
{
//read in file here
treeNode *root = NULL;
root = insert(root, 8);
root = insert(root, 1);
root = insert(root, 90);
root = insert(root, 3);
root = insert(root, 80);
root = insert(root, 6);
root = insert(root, 83);
printTree(root);
return 0;
}
/*
Purpose: Constructs a new node for the tree.
Inputs: The data for the node.
Outputs: returns the new node
*/
treeNode* createNewNode(int data)
{
treeNode *newNode = new treeNode;
newNode->data = data;
newNode->leftChild = NULL;
newNode->rightChild = NULL;
return newNode;
}
/*
Purpose: Calculates the depth of a given node using recursion.
Inputs: The node to check the depth on.
Outputs: returns the depth
*/
int getNodeDepth(treeNode *node)
{
if (node == NULL) // tree doesn't exist
return(0);
return(1 + max(getNodeDepth(node->leftChild), getNodeDepth(node->rightChild)));
}
/*
Purpose: Inserts a node into the tree.
Inputs: The node to be inserted and the data for the node.
Outputs: returns the inserted node
*/
treeNode* insert(treeNode *node, int data)
{
if (node == NULL)
return createNewNode(data);
else
{
if (data <= node->data)
{
node->leftChild = insert(node->leftChild, data);
}
else
{
node->rightChild = insert(node->rightChild, data);
}
return node;
}
}
void printTree_(const treeNode* node, int depth)
{
if (node == NULL)
return;
for (int i=0; i<depth; ++i)
std:cout.put('~');
std::cout << node->data << '\n';
printTree_(node->leftChild, depth+1);
printTree_(node->rightChild, depth+1);
}
/*
Purpose: Prints the BST in a horizontal preorder format.
Inputs: The root node.
Outputs: nothing
*/
void printTree(treeNode *node)
{
printTree_(node, 0);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnN0cmVhbT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8dmVjdG9yPgoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGZzdHJlYW0+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8YWxnb3JpdGhtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBzdHJ1Y3QgdHJlZU5vZGUgewogICAgCiAgICB0cmVlTm9kZSAqbGVmdENoaWxkOwogICAgdHJlZU5vZGUgKnJpZ2h0Q2hpbGQ7CiAgICBpbnQgZGF0YTsKICAgIAp9IHRyZWVOb2RlOwoKCnZvaWQgcHJpbnRUcmVlKHRyZWVOb2RlKik7CmludCBnZXROb2RlRGVwdGgodHJlZU5vZGUqKTsKdHJlZU5vZGUqIGluc2VydCh0cmVlTm9kZSosIGludCk7CnRyZWVOb2RlKiBjcmVhdGVOZXdOb2RlKGludCk7CgppbnQgbWFpbigpCnsKICAgIAogICAgCiAgICAvL3JlYWQgaW4gZmlsZSBoZXJlCiAgICAKICAgIAogICAgdHJlZU5vZGUgKnJvb3QgPSBOVUxMOwogICAgcm9vdCA9IGluc2VydChyb290LCA4KTsKICAgIHJvb3QgPSBpbnNlcnQocm9vdCwgMSk7CiAgICByb290ID0gaW5zZXJ0KHJvb3QsIDkwKTsKICAgIHJvb3QgPSBpbnNlcnQocm9vdCwgMyk7CiAgICByb290ID0gaW5zZXJ0KHJvb3QsIDgwKTsKICAgIHJvb3QgPSBpbnNlcnQocm9vdCwgNik7CiAgICByb290ID0gaW5zZXJ0KHJvb3QsIDgzKTsKICAgIAogICAgcHJpbnRUcmVlKHJvb3QpOwogICAgCiAgICByZXR1cm4gMDsKfQoKCi8qCiBQdXJwb3NlOiBDb25zdHJ1Y3RzIGEgbmV3IG5vZGUgZm9yIHRoZSB0cmVlLgogSW5wdXRzOiAgVGhlIGRhdGEgZm9yIHRoZSBub2RlLgogT3V0cHV0czogcmV0dXJucyB0aGUgbmV3IG5vZGUKICovCnRyZWVOb2RlKiBjcmVhdGVOZXdOb2RlKGludCBkYXRhKQp7CiAgICB0cmVlTm9kZSAqbmV3Tm9kZSA9IG5ldyB0cmVlTm9kZTsKICAgIG5ld05vZGUtPmRhdGEgPSBkYXRhOwogICAgbmV3Tm9kZS0+bGVmdENoaWxkID0gTlVMTDsKICAgIG5ld05vZGUtPnJpZ2h0Q2hpbGQgPSBOVUxMOwogICAgcmV0dXJuIG5ld05vZGU7Cn0KCi8qCiBQdXJwb3NlOiBDYWxjdWxhdGVzIHRoZSBkZXB0aCBvZiBhIGdpdmVuIG5vZGUgdXNpbmcgcmVjdXJzaW9uLgogSW5wdXRzOiAgVGhlIG5vZGUgdG8gY2hlY2sgdGhlIGRlcHRoIG9uLgogT3V0cHV0czogcmV0dXJucyB0aGUgZGVwdGgKICovCmludCBnZXROb2RlRGVwdGgodHJlZU5vZGUgKm5vZGUpCnsKICAgIGlmIChub2RlID09IE5VTEwpICAvLyB0cmVlIGRvZXNuJ3QgZXhpc3QKICAgICAgICByZXR1cm4oMCk7CiAgICAKICAgIHJldHVybigxICsgbWF4KGdldE5vZGVEZXB0aChub2RlLT5sZWZ0Q2hpbGQpLCBnZXROb2RlRGVwdGgobm9kZS0+cmlnaHRDaGlsZCkpKTsKfQoKCi8qCiBQdXJwb3NlOiBJbnNlcnRzIGEgbm9kZSBpbnRvIHRoZSB0cmVlLgogSW5wdXRzOiAgVGhlIG5vZGUgdG8gYmUgaW5zZXJ0ZWQgYW5kIHRoZSBkYXRhIGZvciB0aGUgbm9kZS4KIE91dHB1dHM6IHJldHVybnMgdGhlIGluc2VydGVkIG5vZGUKICovCnRyZWVOb2RlKiBpbnNlcnQodHJlZU5vZGUgKm5vZGUsIGludCBkYXRhKQp7CiAgICBpZiAobm9kZSA9PSBOVUxMKQogICAgICAgIHJldHVybiBjcmVhdGVOZXdOb2RlKGRhdGEpOwogICAgZWxzZQogICAgewogICAgICAgIGlmIChkYXRhIDw9IG5vZGUtPmRhdGEpCiAgICAgICAgewogICAgICAgICAgICBub2RlLT5sZWZ0Q2hpbGQgPSBpbnNlcnQobm9kZS0+bGVmdENoaWxkLCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgICAgbm9kZS0+cmlnaHRDaGlsZCA9IGluc2VydChub2RlLT5yaWdodENoaWxkLCBkYXRhKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5vZGU7CiAgICB9Cn0KCgp2b2lkIHByaW50VHJlZV8oY29uc3QgdHJlZU5vZGUqIG5vZGUsIGludCBkZXB0aCkKewogICAgaWYgKG5vZGUgPT0gTlVMTCkKICAgICAgICByZXR1cm47CiAgICAKICAgIGZvciAoaW50IGk9MDsgaTxkZXB0aDsgKytpKQogICAgICAgIHN0ZDpjb3V0LnB1dCgnficpOwogICAgc3RkOjpjb3V0IDw8IG5vZGUtPmRhdGEgPDwgJ1xuJzsKICAgIHByaW50VHJlZV8obm9kZS0+bGVmdENoaWxkLCBkZXB0aCsxKTsKICAgIHByaW50VHJlZV8obm9kZS0+cmlnaHRDaGlsZCwgZGVwdGgrMSk7Cn0KLyoKIFB1cnBvc2U6IFByaW50cyB0aGUgQlNUIGluIGEgaG9yaXpvbnRhbCBwcmVvcmRlciBmb3JtYXQuCiBJbnB1dHM6ICBUaGUgcm9vdCBub2RlLgogT3V0cHV0czogbm90aGluZwogKi8Kdm9pZCBwcmludFRyZWUodHJlZU5vZGUgKm5vZGUpCnsKICAgIHByaW50VHJlZV8obm9kZSwgMCk7Cn0=