Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.36 KB | None | 0 0
  1. #include "Tree.h"
  2.  
  3. Tree::Tree() {
  4.     root = nullptr;
  5. }
  6.  
  7. Node *Tree::getRoot() {
  8.     return root;
  9. }
  10.  
  11. bool Tree::isEmpty() {
  12.     return (root == nullptr);
  13. }
  14.  
  15. void Tree::addNode(int value) {
  16.     Node *node = new Node;
  17.     node->value = value;
  18.     node->left = nullptr;
  19.     node->right = nullptr;
  20.     if (isEmpty()) {
  21.         root = node;
  22.     } else {
  23.         bool isContinue = true;
  24.         Node *temp = getRoot();
  25.         while (isContinue) {
  26.             if (value < temp->value) {
  27.                 if (temp->left != nullptr) {
  28.                     temp = temp->left;
  29.                 } else {
  30.                     isContinue = false;
  31.                     temp->left = node;
  32.                 }
  33.             } else {
  34.                 if (temp->right != nullptr) {
  35.                     temp = temp->right;
  36.                 } else {
  37.                     isContinue = false;
  38.                     temp->right = node;
  39.                 }
  40.             }
  41.         }
  42.     }
  43. }
  44.  
  45. std::string Tree::task(Node *node) {
  46.     std::string output = "";
  47.     if (node->left != nullptr && node->right != nullptr) {
  48.         if (abs(node->left->countDepth() - node->right->countDepth()) == 1) {
  49.             output += std::to_string(node->value) + " ";
  50.         } else {
  51.             task(node->left);
  52.             task(node->right);
  53.         }
  54.     } else {
  55.         if (node->left != nullptr)
  56.             task(node->left);
  57.         if (node->right != nullptr)
  58.             task(node->right);
  59.     }
  60.     return output;
  61. }
  62.  
  63. std::string Tree::printTree() {
  64.     std::string output = printTree("", root, false, (root->right != nullptr));
  65.     return output;
  66. }
  67.  
  68. std::string Tree::printTree(std::string prefix, Node *node, bool isRight, bool hasLeft) {
  69.     std::string output = "";
  70.     if (node != nullptr) {
  71.         output.append(prefix);
  72.         if (isRight && hasLeft)
  73.             output.append("├R─");
  74.         else if (isRight)
  75.             output.append("└R─");
  76.         else
  77.             output.append("└L─");
  78.         output.append(std::to_string(node->value));
  79.         output.append("\n");
  80.         if (isRight && hasLeft)
  81.             prefix += "│ ";
  82.         else
  83.             prefix += " ";
  84.         output.append(printTree(prefix, node->right, true, (node->left != nullptr)));
  85.         output.append(printTree(prefix, node->left, false, true));
  86.     }
  87.     return output;
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement