用C++实现 二叉树的统计 count.cpp • 输入格式:第一行一串字符 • 这串字符表示扩展二叉树的前序序列,其中空结点用#表示 • 输出格式: 一个整数 代表二叉树的仅有一个孩子的节点的个数。
时间: 2024-02-27 16:58:18 浏览: 23
好的,我来为您解答这个问题。
首先,我们需要定义二叉树的结构体:
```cpp
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char v) : val(v), left(nullptr), right(nullptr) {}
};
```
然后,读入前序序列并构建二叉树:
```cpp
#include <iostream>
#include <stack>
using namespace std;
TreeNode* buildTree(string s) {
stack<TreeNode*> st;
TreeNode* root = new TreeNode(s[0]);
st.push(root);
for (int i = 1; i < s.size(); i++) {
if (s[i] == '#') {
if (!st.empty() && !st.top()->left) {
st.top()->left = new TreeNode('#');
} else {
st.top()->right = new TreeNode('#');
}
} else {
TreeNode* node = new TreeNode(s[i]);
if (!st.empty() && !st.top()->left) {
st.top()->left = node;
} else {
st.top()->right = node;
}
st.push(node);
}
while (!st.empty() && st.top()->left && st.top()->right) {
st.pop();
}
}
return root;
}
```
最后,统计仅有一个孩子的节点个数:
```cpp
int count(TreeNode* root) {
if (!root || (root->left && root->right)) {
return 0;
}
return 1 + count(root->left) + count(root->right);
}
```
完整代码如下:
```cpp
#include <iostream>
#include <stack>
using namespace std;
struct TreeNode {
char val;
TreeNode* left;
TreeNode* right;
TreeNode(char v) : val(v), left(nullptr), right(nullptr) {}
};
TreeNode* buildTree(string s) {
stack<TreeNode*> st;
TreeNode* root = new TreeNode(s[0]);
st.push(root);
for (int i = 1; i < s.size(); i++) {
if (s[i] == '#') {
if (!st.empty() && !st.top()->left) {
st.top()->left = new TreeNode('#');
} else {
st.top()->right = new TreeNode('#');
}
} else {
TreeNode* node = new TreeNode(s[i]);
if (!st.empty() && !st.top()->left) {
st.top()->left = node;
} else {
st.top()->right = node;
}
st.push(node);
}
while (!st.empty() && st.top()->left && st.top()->right) {
st.pop();
}
}
return root;
}
int count(TreeNode* root) {
if (!root || (root->left && root->right)) {
return 0;
}
return 1 + count(root->left) + count(root->right);
}
int main() {
string s;
cin >> s;
TreeNode* root = buildTree(s);
cout << count(root) << endl;
return 0;
}
```
希望能够帮到您!