diff --git a/homework4/BiTree.h b/homework4/BiTree.h index 2ef41ac..7065f5f 100644 --- a/homework4/BiTree.h +++ b/homework4/BiTree.h @@ -17,6 +17,37 @@ public: { } + static bool is_empty(BiTree* bt) + { + if (bt == nullptr) + { + return true; + } + return false; + } + + static bool is_leaf(BiTree* bt) + { + if (bt->left == nullptr && bt->right == nullptr) + { + return true; + } + return false; + } + + static T sum_leaf(BiTree* bt) + { + if (is_empty(bt)) + { + return 0; + } + if (is_leaf(bt)) + { + return bt->data; + } + return sum_leaf(bt->left) + sum_leaf(bt->right); + } + static BiTree* createNode(const T& value) { BiTree* node = new BiTree(); @@ -26,6 +57,25 @@ public: return node; } + static void insertNode(BiTree*& bt, T value) + { + if (bt == nullptr) + { + bt = createNode(value); + } + else + { + if (value < bt->data) + { + insertNode(bt->left, value); + } + if (value > bt->data) + { + insertNode(bt->right, value); + } + } + } + static BiTree* buildFromPreorderString(const std::string& preorder, size_t& index) { if (index >= preorder.size() || preorder[index] == '#') @@ -67,7 +117,7 @@ public: this->toStringHelper(oss, "", false, false); return oss.str(); } - + void destroy() { if (left) diff --git a/homework4/test1.cpp b/homework4/test1.cpp index 0ba525a..0dd56aa 100644 --- a/homework4/test1.cpp +++ b/homework4/test1.cpp @@ -1,17 +1,17 @@ /* * 二叉树采用二叉链存储结构存放,结点值为int 类型,设计一个递归算法求二叉树 bt 中所有叶子结点值之和 */ -#include -#include"BiTree.h" +#include +#include "BiTree.h" + using namespace std; - -BiTree* createTreeFromArray(const int* values, int size) +BiTree* createTreeFromArray(const int* values, int size) { - BiTree* root = nullptr; + BiTree* root = nullptr; for (int i = 0; i < size; ++i) { - BiTree::insertNode(root, values[i]); + BiTree::insertNode(root, values[i]); } return root; } @@ -21,9 +21,22 @@ 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); + + if (root) + { + cout << "树结构为:" << endl; + cout << root->toString() << endl; + + cout << "叶子节点数据总和: " << BiTree::sum_leaf(root) << endl; + + root->destroy(); + delete root; + } + else + { + cout << "树为空。" << endl; + } - cout << "树结构为" << endl << root->toString() << endl; - cout << "叶子节点数据总和: " << BiTree::sum_leaf(root) << endl; return 0; }