用c++对于给定的二叉树,输出其先序序列、中序序列、后序序列并输出叶子结点数。 输入格式: 二叉树的层次序列。 提示:一棵二叉树的层次序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。 输出格式: 若是非空二叉树,则输出四行内容 第一行是二叉树的先序遍历序列; 第二行是二叉树的中序遍历序列; 第三行是二叉树的后序遍历序列; 第四行是叶子结点数; 若是空二叉树 只需输出叶子数0 输入样例1: 在这里给出一组输入。例如: FCEADHG##B###M##### 输出样例1: 在这里给出相应的输出。例如: FCADBEHGM ACBDFHEMG ABDCHMGEF 4 输入样例2: 在这里给出一组输入。例如: # 输出样例2: 在这里给出相应的输出。例如: 0
时间: 2023-08-10 10:43:25 浏览: 89
以下是C++代码实现:
```cpp
#include <iostream>
#include <string>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char x) : val(x), left(NULL), right(NULL) {}
};
// 将层次序列转换成二叉树
TreeNode* createTree(string& s, int& i) {
if (i >= s.size() || s[i] == '#') {
i++;
return NULL;
}
TreeNode* root = new TreeNode(s[i]);
i++;
root->left = createTree(s, i);
root->right = createTree(s, i);
return root;
}
// 递归实现先序遍历
void preOrder(TreeNode* root) {
if (root == NULL) return;
cout << root->val;
preOrder(root->left);
preOrder(root->right);
}
// 递归实现中序遍历
void inOrder(TreeNode* root) {
if (root == NULL) return;
inOrder(root->left);
cout << root->val;
inOrder(root->right);
}
// 递归实现后序遍历
void postOrder(TreeNode* root) {
if (root == NULL) return;
postOrder(root->left);
postOrder(root->right);
cout << root->val;
}
// 计算叶子结点数
int countLeaves(TreeNode* root) {
if (root == NULL) return 0;
if (root->left == NULL && root->right == NULL) return 1;
return countLeaves(root->left) + countLeaves(root->right);
}
int main() {
string s;
cin >> s;
int i = 0;
TreeNode* root = createTree(s, i);
if (root == NULL) {
cout << 0 << endl;
return 0;
}
preOrder(root);
cout << endl;
inOrder(root);
cout << endl;
postOrder(root);
cout << endl;
cout << countLeaves(root) << endl;
return 0;
}
```
输入格式为一行字符串,表示二叉树的层次序列。输出先序、中序、后序遍历序列和叶子结点数。对于空树,只需输出叶子结点数0。
阅读全文