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 +}