改了下toString风格
This commit is contained in:
+44
-22
@@ -1,65 +1,87 @@
|
||||
#include "BiTree.h"
|
||||
#include <sstream>
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user