1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
#include <iostream>
#include <iomanip>
// TreeNode.h
struct TreeNode
{
char value;
TreeNode *left, *right;
TreeNode(char theValue);
};
// TreeNode.cpp
TreeNode::TreeNode(char theValue) : value(theValue), left(nullptr), right(nullptr)
{
}
// BinaryTree.h
class BinaryTree
{
public:
BinaryTree();
void add(char data);
void print() const;
void print_tree() const;
private:
static void add(TreeNode* toAdd, char data);
static void print(TreeNode* node);
static void print_tree(TreeNode* node, int indent=0);
TreeNode* rootPtr;
};
// BinaryTree.cpp
BinaryTree::BinaryTree() : rootPtr(nullptr)
{
}
void BinaryTree::add(char data)
{
if (rootPtr)
{
add(rootPtr, data);
}
else
{
rootPtr = new TreeNode(data);
}
}
void BinaryTree::add(TreeNode* toAdd, char data)
{
if (data < toAdd->value) {
if (toAdd->left)
{
add(toAdd->left, data);
}
else
{
toAdd->left = new TreeNode(data);
}
}
else {
if (toAdd->right) {
add(toAdd->right, data);
}
else {
toAdd->right = new TreeNode(data);
}
}
}
void BinaryTree::print() const
{
print(rootPtr);
std::cout << '\n';
}
void BinaryTree::print(TreeNode* node)
{
if (node)
{
print(node->left);
std::cout << node->value << ' ';
print(node->right);
}
}
void BinaryTree::print_tree() const
{
print_tree(rootPtr);
std::cout << '\n';
}
void BinaryTree::print_tree(TreeNode* node, int indent)
{
if (node)
{
print_tree(node->right, indent + 1);
std::cout << std::setw(indent*4) << "" << node->value << '\n';
print_tree(node->left, indent + 1);
}
}
// Main.cpp
int main()
{
BinaryTree tree;
for (char ch: {'c', 'h', 'z', 'b', 'd', 'e'})
tree.add(ch);
tree.print();
tree.print_tree();
return 0;
}
|