改了下toString风格

This commit is contained in:
2024-11-22 15:45:07 +08:00
parent 81e283e11c
commit fd7908e2de
+44 -22
View File
@@ -1,65 +1,87 @@
#include "BiTree.h" #include "BiTree.h"
#include <sstream> #include <sstream>
bool BiTree::is_empty(BiTree *bt) { bool BiTree::is_empty(BiTree* bt)
if (bt == nullptr) { {
if (bt == nullptr)
{
return true; return true;
} }
return false; return false;
} }
bool BiTree::is_leaf(BiTree *bt) { bool BiTree::is_leaf(BiTree* bt)
if (bt->left == nullptr && bt->right == nullptr) { {
if (bt->left == nullptr && bt->right == nullptr)
{
return true; return true;
} }
return false; return false;
} }
int BiTree::sum_leaf(BiTree *bt) { int BiTree::sum_leaf(BiTree* bt)
if (is_empty(bt)) { {
if (is_empty(bt))
{
return 0; return 0;
} }
if (is_leaf(bt)) { if (is_leaf(bt))
{
return bt->data; return bt->data;
} }
return sum_leaf(bt->left) + sum_leaf(bt->right); return sum_leaf(bt->left) + sum_leaf(bt->right);
} }
BiTree *BiTree::createNode(int data) { BiTree* BiTree::createNode(int data)
BiTree *newNode = new BiTree(); {
BiTree* newNode = new BiTree();
newNode->data = data; newNode->data = data;
newNode->left = nullptr; newNode->left = nullptr;
newNode->right = nullptr; newNode->right = nullptr;
return newNode; return newNode;
} }
void BiTree::insertNode(BiTree *&bt, int value) { void BiTree::insertNode(BiTree*& bt, int value)
if (bt == nullptr) { {
if (bt == nullptr)
{
bt = createNode(value); bt = createNode(value);
} else { }
if (value < bt->data) { else
{
if (value < bt->data)
{
insertNode(bt->left, value); insertNode(bt->left, value);
} else if (value > bt->data) { }
else if (value > bt->data)
{
insertNode(bt->right, value); insertNode(bt->right, value);
} }
} }
} }
void toStringHelper(const BiTree *node, std::ostringstream &oss, const std::string &prefix, bool isLeft) { void toStringHelper(const BiTree* node, std::ostringstream& oss, const std::string& prefix, bool isLeft,
if (node != nullptr) { bool hasSibling)
{
if (node != nullptr)
{
oss << prefix; oss << prefix;
oss << (isLeft ? "|--" : "|--") << node->data << "\n"; oss << (isLeft ? (hasSibling ? "├─" : "└─") : (hasSibling ? "├─" : "└─")) << node->data << "\n";
std::string newPrefix = prefix + (isLeft ? "| " : " "); std::string newPrefix = prefix + (isLeft ? (hasSibling ? "" : " ") : " ");
toStringHelper(node->left, oss, newPrefix, true); bool hasLeftSibling = (node->left != nullptr && node->right != nullptr);
toStringHelper(node->right, oss, newPrefix, false);
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; std::ostringstream oss;
toStringHelper(this, oss, "", false); toStringHelper(this, oss, "", false, false);
return oss.str(); return oss.str();
} }