#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; } }
时间: 2024-04-21 09:27:38 浏览: 79
C++万能头: bits/stdc++.h 下载
这段代码实现了一个二叉树的构建和求解:先通过输入的字符串构建一棵二叉树,然后统计二叉树中有多少个节点同时拥有左右子树(即度为2的节点),最后输出结果。具体实现过程为:
- 定义了一个 treeNode 结构体,其中包括节点的数据(char 类型)和左右子树的指针。
- 定义了一个 Tree 类,其中包括根节点的指针和三个成员函数:
- createNode():通过递归的方式,将输入的字符串构建成一棵二叉树。
- getRoot():获取根节点的指针。
- getAns():统计二叉树中有多少个节点同时拥有左右子树。
- 在主函数中,通过循环输入字符串,每次构建一棵二叉树并统计结果,最后输出结果。
阅读全文