实现代码:
#include<iostream>
#include<queue>
using namespace std;
typedef struct node{
char ch;
node *lc,*rc;
}*tr,node;
void xg(tr &T){
char c;
cin >> c;
if(c == '#') T = NULL;
else{
T = new node;
T -> ch = c;
xg(T -> lc);
xg(T -> rc);
}
}
int js(tr T,int &num){
if(T == NULL) return 0;
if(T -> lc == NULL && T -> rc == NULL) num++;
return js(T -> lc,num) + js(T -> rc,num) + 1;
}
typedef struct node1{
tr *ba; // 初始化时动态分配存储空间
int f,n,ceng;
}node1;
int Initqu(node1 &q){
q.ba = new tr[100];
if(!q.ba) return 0;
q.f = q.n = q.ceng = 0;
return 1;
}
int enqu(node1 &q,tr t){
if((q.n + 1) % 100 == q.f) return 0;
q.ba[q.n] = t;
q.n = (q.n + 1) % 100;
q.ceng = q.ceng + 1;
return 1;
}
int chuqu(node1 &q,tr &t){
if(q.f == q.n) return 0;
t = q.ba[q.f];
q.f = (q.f + 1) % 100;
return 1;
}
int z[100];
void cb(tr T,int &cut){
node1 q;
Initqu(q);
if(!T) return ;
enqu(q,T);
while(q.f != q.n){
chuqu(q,T);
if(++z[q.ceng] > cut) cut = z[q.ceng];
cout << T -> ch;
if(T -> lc) enqu(q,T -> lc);
if(T -> rc) enqu(q,T -> rc);
}
}
void Xchange(tr &t){ // 先序交换
tr p;
if(t == NULL) return ;
if(t -> lc == NULL && t -> rc == NULL) return ;
p = t -> lc;
t -> lc = t -> rc;
t -> rc = p;
Xchange(t -> lc);
Xchange(t -> rc);
}
void Zchange(tr &t){ // 中 || 后 序交换
if(t == NULL) return ;
if(t -> lc == NULL && t -> rc == NULL) return ;
Zchange(t -> lc);
tr p;
p = t -> lc;
t -> lc = t -> rc;
Zchange(t -> rc);
t -> rc = p;
}
void sc(tr t){
if(t == NULL) return ;
sc(t -> lc);
cout << t -> ch;
sc(t -> rc);
}
int main()
{
cout << "请输入二叉链表的序列 : " << endl;
node *TR;
xg(TR);
int num = 0 ,ans = js(TR,num);
cout << "该二叉树的总节点个数为 : " << ans << endl;
cout << "该二叉树的叶子节点树为 : " << num << endl;
int cut = 0;
cb(TR,cut);
cout << endl;
cout << "该二叉树的宽度为 : " << cut << endl;
Xchange(TR);
sc(TR);
return 0;
}