diff --git a/homework4/BiTree.cpp b/homework4/BiTree.cpp index 6faab55..52d48ca 100644 --- a/homework4/BiTree.cpp +++ b/homework4/BiTree.cpp @@ -1,65 +1,87 @@ #include "BiTree.h" #include -bool BiTree::is_empty(BiTree *bt) { - if (bt == nullptr) { +bool BiTree::is_empty(BiTree* bt) +{ + if (bt == nullptr) + { return true; } return false; } -bool BiTree::is_leaf(BiTree *bt) { - if (bt->left == nullptr && bt->right == nullptr) { +bool BiTree::is_leaf(BiTree* bt) +{ + if (bt->left == nullptr && bt->right == nullptr) + { return true; } return false; } -int BiTree::sum_leaf(BiTree *bt) { - if (is_empty(bt)) { +int BiTree::sum_leaf(BiTree* bt) +{ + if (is_empty(bt)) + { return 0; } - if (is_leaf(bt)) { + if (is_leaf(bt)) + { return bt->data; } return sum_leaf(bt->left) + sum_leaf(bt->right); } -BiTree *BiTree::createNode(int data) { - BiTree *newNode = new BiTree(); +BiTree* BiTree::createNode(int data) +{ + BiTree* newNode = new BiTree(); newNode->data = data; newNode->left = nullptr; newNode->right = nullptr; return newNode; } -void BiTree::insertNode(BiTree *&bt, int value) { - if (bt == nullptr) { +void BiTree::insertNode(BiTree*& bt, int value) +{ + if (bt == nullptr) + { bt = createNode(value); - } else { - if (value < bt->data) { + } + else + { + if (value < bt->data) + { insertNode(bt->left, value); - } else if (value > bt->data) { + } + else if (value > bt->data) + { insertNode(bt->right, value); } } } -void toStringHelper(const BiTree *node, std::ostringstream &oss, const std::string &prefix, bool isLeft) { - if (node != nullptr) { +void toStringHelper(const BiTree* node, std::ostringstream& oss, const std::string& prefix, bool isLeft, + bool hasSibling) +{ + if (node != nullptr) + { oss << prefix; - oss << (isLeft ? "|--" : "|--") << node->data << "\n"; + oss << (isLeft ? (hasSibling ? "├─" : "└─") : (hasSibling ? "├─" : "└─")) << node->data << "\n"; - std::string newPrefix = prefix + (isLeft ? "| " : " "); - toStringHelper(node->left, oss, newPrefix, true); - toStringHelper(node->right, oss, newPrefix, false); + std::string newPrefix = prefix + (isLeft ? (hasSibling ? "│ " : " ") : " "); + bool hasLeftSibling = (node->left != nullptr && node->right != nullptr); + + toStringHelper(node->left, oss, newPrefix, true, hasLeftSibling); + toStringHelper(node->right, oss, newPrefix, false, false); } } -std::string BiTree::toString() { +std::string BiTree::toString() +{ std::ostringstream oss; - toStringHelper(this, oss, "", false); + toStringHelper(this, oss, "", false, false); return oss.str(); } +