酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

使用c++,不支持c++11【问题描述】首先用二叉树的前序遍历建立一棵二叉树,然后计算二叉树的宽度并输出,可以用两个函数实现,第1个函数利用前序遍历计算二叉树每一层的结点个数,把这些数据存放在一个数组中,然后用另一个函数找出数组的最大值,即为二叉树的宽度,2个函数的声明看hint,注意这2个函数作为二叉树类的成员函数 【输入形式】假设二叉树的结点为字符型,输入“#”表示空结点,输入为一行字符串,具体见sample input,二叉树见教材p202页,图5.15 【输出形式】输出一个整数值,即二叉树的宽度 【样例输入】 abc##de#g##f### 【样例输出】 2 【样例说明】 其他测试数据 输入:abd##eg###c#f## 输出:3 【提示信息】 第1个函数利用先序遍历计算二叉树每一层的结点个数,参数a存放每层的结点个数, 参数h表示第几层 void binarytree<t>::levelnum(bintreenode<t> *root,int a[],int h) { ... 补充代码 } 第2个函数调用第1个函数,并找出数

以下是使用 C++ 实现计算二叉树宽度的代码,不使用 C++11 特性: ```cpp #include <iostream> template<typename T> struct BintreeNode { T data; BintreeNode* left; BintreeNode* right; BintreeNode(T value) : data(value), left(NULL), right(NULL) {} }; template<typename T> class BinaryTree { public: void levelNum(BintreeNode<T>* root, int a[], int h) { if (root == NULL) { return; } a[h]++; levelNum(root->left, a, h + 1); levelNum(root->right, a, h + 1); } int getWidth(BintreeNode<T>* root) { int a[100] = {0}; levelNum(root, a, 0); int maxWidth = 0; for (int i = 0; i < 100; i++) { if (a[i] > maxWidth) { maxWidth = a[i]; } } return maxWidth; } }; // 构建二叉树的函数 template<typename T> BintreeNode<T>* buildTree(const std::string& str, int& index) { if (index >= str.size()) { return NULL; } if (str[index] == '#') { index++; return NULL; } BintreeNode<T>* root = new BintreeNode<T>(str[index]); index++; root->left = buildTree(str, index); root->right = buildTree(str, index); return root; } int main() { std::string input = "abc##de#g##f"; int index = 0; BinaryTree<char> tree; BintreeNode<char>* root = buildTree(input, index); int width = tree.getWidth(root); std::cout << width << std::endl; return 0; } ``` [2024-11-10 23:41:27 | AI写代码神器 | 497点数解答]

相关提问