#include<bits/stdc++.h> using namespace std; string str; int len; struct treeNode{ char data; treeNode *L_child,*R_child; treeNode(char d){ data=d; } }; template<class T> class Tree{ public: Tree(){ root=NULL; } treeNode* createNode() { treeNode *t; if(len>=str.size()){ return NULL; } T data = str[len++]; if(data=='*'){ t=NULL; }else{ t=new treeNode(data); t->L_child=createNode(); t->R_child=createNode(); } return t; }; treeNode* getRoot(); int getAns(treeNode *root); void LRN(treeNode *root); private: treeNode *root; }; template<class T> treeNode* Tree<T>::getRoot() { return this->root; } template<class T> int Tree<T>::getAns(treeNode *root){ if(root==NULL) return 0; int ans = 0; if(root->L_child!=NULL&&root->R_child!=NULL){ ans=1; } return ans+getAns(root->L_child)+getAns(root->R_child); } int main() { while(cin>>str){ len=0; Tree<char> *tree = new Tree<char>(); treeNode *root = tree->getRoot(); root = tree->createNode(); cout<<tree->getAns(root)<<endl; } }通过这些代码实现的功能用C语言来实现
时间: 2024-03-15 16:44:14 浏览: 66
这段代码涉及到了 C++ 中的模板类和指针操作,如果要用 C 语言实现该功能,需要重新编写代码。以下是使用 C 语言实现创建二叉树并统计有双亲结点的结点个数的一个例子:
```C
#include <stdio.h>
#include <stdlib.h>
struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
};
struct TreeNode *createNode(char data) {
struct TreeNode *node = (struct TreeNode*) malloc(sizeof(struct TreeNode));
node->data = data;
node->left = NULL;
node->right = NULL;
return node;
}
struct TreeNode *createTree() {
char data;
scanf("%c", &data);
if (data == '*') {
return NULL;
}
struct TreeNode *root = createNode(data);
root->left = createTree();
root->right = createTree();
return root;
}
int countNodes(struct TreeNode *root) {
if (root == NULL) {
return 0;
}
int count = 0;
if (root->left != NULL || root->right != NULL) {
count = 1;
}
count += countNodes(root->left) + countNodes(root->right);
return count;
}
int main() {
struct TreeNode *root = createTree();
printf("%d\n", countNodes(root));
return 0;
}
```
该程序首先定义了一个二叉树结点的结构体 `TreeNode`,包含数据成员 `data` 和左右子结点指针成员 `left` 和 `right`。然后定义了一个创建结点的函数 `createNode`,用于动态分配内存并初始化结点。接着定义了一个创建二叉树的函数 `createTree`,该函数根据前序遍历的顺序输入结点信息,并递归创建二叉树。最后定义了一个统计有双亲结点的结点个数的函数 `countNodes`,该函数通过递归遍历二叉树,并判断每个结点是否有双亲结点,最终返回有双亲结点的结点数目。在 `main` 函数中,首先通过 `createTree` 函数创建二叉树,然后调用 `countNodes` 函数统计有双亲结点的结点个数,并输出结果。
阅读全文