代码:
#include <iostream> #include<stack> #include<queue> #include<cstdio> #include<cstring> using namespace std; typedef struct Node{ char data; int le; Node * left,*right; Node(){le=0;} }BinTreeNode; class BinTree{ private: BinTreeNode *root; int maxle; public: BinTree(){ cout<<"输入要创建的树,空节点用#代替\n"; root = creat(); root->le=0; maxle=0; } BinTree(BinTreeNode & temp){ root = &temp; temp.left = NULL; temp.right = NULL; } BinTreeNode * getRoot(){ return root; } BinTreeNode * creat(){ //递归创建树 char t; cin>>t; if(t=='#'){// # stand for null return NULL; } else{ BinTreeNode *r = new BinTreeNode; r->data = t; r->left = creat(); r->right = creat(); return r; } } void dfs(BinTreeNode *x){ if(x){ if(maxle<x->le) maxle=x->le; if(x->left)x->left->le=x->le+1; if(x->right)x->right->le=x->le+1; dfs(x->left);dfs(x->right); } } void dfs(){dfs(root);} void dfs2(int *k,BinTreeNode *x) { if(x){ if(x->left==0&&x->right==0)k[x->le]++; dfs2(k,x->left); dfs2(k,x->right); } } void leaf() { dfs(); int num[100]={}; dfs2(num,root); for(int i=0;i<=maxle;++i) printf("第%d层包含%d个叶结点.\n",i,num[i]); } }; int main(){ // 测试数据 (教材87页图) *+A##B##+*-C##D##E##F## BinTree mb; //BinTreeNode *r = mb.getRoot(); mb.leaf(); return 0; }
运行结果: