Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Tree.h"
- Tree::Tree() {
- root = nullptr;
- }
- Node *Tree::getRoot() {
- return root;
- }
- bool Tree::isEmpty() {
- return (root == nullptr);
- }
- void Tree::addNode(int value) {
- Node *node = new Node;
- node->value = value;
- node->left = nullptr;
- node->right = nullptr;
- if (isEmpty()) {
- root = node;
- } else {
- bool isContinue = true;
- Node *temp = getRoot();
- while (isContinue) {
- if (value < temp->value) {
- if (temp->left != nullptr) {
- temp = temp->left;
- } else {
- isContinue = false;
- temp->left = node;
- }
- } else {
- if (temp->right != nullptr) {
- temp = temp->right;
- } else {
- isContinue = false;
- temp->right = node;
- }
- }
- }
- }
- }
- std::string Tree::task(Node *node) {
- std::string output = "";
- if (node->left != nullptr && node->right != nullptr) {
- if (abs(node->left->countDepth() - node->right->countDepth()) == 1) {
- output += std::to_string(node->value) + " ";
- } else {
- task(node->left);
- task(node->right);
- }
- } else {
- if (node->left != nullptr)
- task(node->left);
- if (node->right != nullptr)
- task(node->right);
- }
- return output;
- }
- std::string Tree::printTree() {
- std::string output = printTree("", root, false, (root->right != nullptr));
- return output;
- }
- std::string Tree::printTree(std::string prefix, Node *node, bool isRight, bool hasLeft) {
- std::string output = "";
- if (node != nullptr) {
- output.append(prefix);
- if (isRight && hasLeft)
- output.append("├R─");
- else if (isRight)
- output.append("└R─");
- else
- output.append("└L─");
- output.append(std::to_string(node->value));
- output.append("\n");
- if (isRight && hasLeft)
- prefix += "│ ";
- else
- prefix += " ";
- output.append(printTree(prefix, node->right, true, (node->left != nullptr)));
- output.append(printTree(prefix, node->left, false, true));
- }
- return output;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement