From fdbef4b3cc3c5771253714110ce634642f0935df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=A1=E5=9D=82=E6=98=B4?= Date: Thu, 21 Nov 2024 23:09:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=86=99=E4=BA=86=E4=B8=AAtostring?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework4/BiTree.cpp | 38 +++++++++++++++++++++++++++++--------- homework4/BiTree.h | 12 +++++++++--- homework4/test1.cpp | 14 +++++++------- 3 files changed, 45 insertions(+), 19 deletions(-) diff --git a/homework4/BiTree.cpp b/homework4/BiTree.cpp index e306936..6faab55 100644 --- a/homework4/BiTree.cpp +++ b/homework4/BiTree.cpp @@ -1,38 +1,39 @@ #include "BiTree.h" +#include bool BiTree::is_empty(BiTree *bt) { - if(bt==nullptr) { + if (bt == nullptr) { return true; } return false; } bool BiTree::is_leaf(BiTree *bt) { - if(bt->left==nullptr && bt->right==nullptr) { + if (bt->left == nullptr && bt->right == nullptr) { return true; } return false; } int BiTree::sum_leaf(BiTree *bt) { - if(is_empty(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); + 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) { +void BiTree::insertNode(BiTree *&bt, int value) { if (bt == nullptr) { bt = createNode(value); } else { @@ -42,4 +43,23 @@ void BiTree::insertNode(BiTree*& bt, int value) { insertNode(bt->right, value); } } -} \ No newline at end of file +} + + +void toStringHelper(const BiTree *node, std::ostringstream &oss, const std::string &prefix, bool isLeft) { + if (node != nullptr) { + oss << prefix; + + oss << (isLeft ? "|--" : "|--") << node->data << "\n"; + + std::string newPrefix = prefix + (isLeft ? "| " : " "); + toStringHelper(node->left, oss, newPrefix, true); + toStringHelper(node->right, oss, newPrefix, false); + } +} + +std::string BiTree::toString() { + std::ostringstream oss; + toStringHelper(this, oss, "", false); + return oss.str(); +} diff --git a/homework4/BiTree.h b/homework4/BiTree.h index 5dd446b..3eca0e0 100644 --- a/homework4/BiTree.h +++ b/homework4/BiTree.h @@ -1,6 +1,7 @@ #ifndef BITREE_H #define BITREE_H +#include class BiTree { @@ -10,12 +11,17 @@ public: BiTree *right; static bool is_empty(BiTree *bt); + static bool is_leaf(BiTree *bt); + static int sum_leaf(BiTree *bt); - static BiTree* createNode(int data); - static void insertNode(BiTree*& bt, int value); + + static BiTree *createNode(int data); + + static void insertNode(BiTree *&bt, int value); + + std::string toString(); }; - #endif //BITREE_H diff --git a/homework4/test1.cpp b/homework4/test1.cpp index 8b68c83..8b19afe 100644 --- a/homework4/test1.cpp +++ b/homework4/test1.cpp @@ -1,14 +1,13 @@ /* - *二叉树采用二叉链存储结构存放,结点值为int 类型,设计一个递归算法求二叉树 bt 中所有叶子结点值之和 + *ö洢ṹţֵΪint ͣһݹ㷨 bt Ҷӽֵ֮ */ #include #include"BiTree.h" using namespace std; - -BiTree* createTreeFromArray(const int* values, int size) { - BiTree* root = nullptr; +BiTree *createTreeFromArray(const int *values, int size) { + BiTree *root = nullptr; for (int i = 0; i < size; ++i) { BiTree::insertNode(root, values[i]); } @@ -19,8 +18,9 @@ int main() { int testValues[] = {7, 3, 10, 1, 5, 9, 12}; int size = sizeof(testValues) / sizeof(testValues[0]); - BiTree* root = createTreeFromArray(testValues, size); + BiTree *root = createTreeFromArray(testValues, size); - cout << "Sum of leaf nodes: " << BiTree::sum_leaf(root) << endl; + cout << "ṹΪ" << endl << root->toString() << endl; + cout << "Ҷӽڵ֮Ϊ: " << BiTree::sum_leaf(root) << endl; return 0; -} \ No newline at end of file +}