1.统计二叉树中度为0的结点数
int Degree_0 ( BiTree T) {
if ( T == NULL ) {
return 0 ;
}
if ( T-> lchild== NULL && T-> rchild== NULL ) {
return 1 ;
}
else {
return Degree_0 ( T-> lchild) + Degree_0 ( T-> rchild) ;
}
}
2.统计二叉树中度为1的结点数
int Degree_1 ( BiTree T) {
if ( T == NULL ) {
return 0 ;
}
if ( ( T-> lchild && T-> rchild == NULL ) || ( T-> lchild == NULL && T-> rchild) ) {
return 1 + Degree_1 ( T-> lchild) + Degree_1 ( T-> rchild) ;
}
else {
return Degree_1 ( T-> lchild) + Degree_1 ( T-> rchild) ;
}
}
3.统计二叉树中度为2的结点数
int Degree_2 ( BiTree T) {
if ( T == NULL ) {
return 0 ;
}
if ( T-> lchild && T-> rchild) {
return Degree_2 ( T-> lchild) + Degree_2 ( T-> rchild) + 1 ;
}
else {
return Degree_2 ( T-> lchild) + Degree_2 ( T-> rchild) ;
}
}
4.统计二叉树的高度
int Height ( BiTree T) {
if ( T == NULL ) {
return 0 ;
}
int l = Height ( T-> lchild) ;
int r = Height ( T-> rchild) ;
return l > r ? ( l+ 1 ) : ( r+ 1 ) ;
}
5.统计二叉树的宽度
#计算每一层的宽度
int Width ( BiTree * T, int level) {
if ( T == NULL ) {
return 0 ;
} else {
if ( level == 1 ) {
return 1 ;
} else {
return Width ( T-> lchild, level - 1 ) + Width ( T-> rchild, level - 1 ) ;
}
}
}
#计算二叉树的最大宽度
int Max_Width ( BiTree T) {
if ( T == NULL ) {
return 0 ;
}
int res = 0 ; #最大宽度
int ans = 0 ; #当前层的宽度
int height = Height ( T) ; #当前二叉树的最大深度
for ( int i = 1 ; i <= height; i++ ) {
ans = Width ( T, i) ;
if ( ans > res) {
res = ans;
}
}
return res;
}
6.从二叉树中删除所有叶结点
void Del_leaf ( BiTree * T) {
BiTree * p = T;
if ( p-> lchild == NULL && p-> rchild == NULL ) {
free ( p) ;
}
Del_leaf ( T-> lchild) ;
Del_leaf ( T-> rchild) ;
}
7.计算指定结点*p所在的层
int Get_level ( BiTree T, BiTNode * p) {
if ( T == NULL )
return 0 ;
if ( T-> data == p-> data)
return 1 ;
int l = Get_level ( T-> lchild, p) ;
int r = Get_level ( T-> rchild, p) ;
if ( l || r) {
return l > r ? ( l+ 1 ) : ( r+ 1 ) ;
}
return 0 ;
}
8.计算二叉树中各结点中的最大元素值
int Max_elem ( BiTree T) {
if ( T == NULL ) {
return ;
}
int max = - 9999 ;
if ( T-> data > max)
max = T-> data;
Max_elem ( T-> lchild) ;
Max_elem ( T-> rchild) ;
return max;
}
9.交换二叉树中每个结点的两个子女
void Swap ( BiTree T) {
if ( T) {
Swap ( T-> lchild) ;
Swap ( T-> rchild) ;
BiTBode temp = T-> lchild;
T-> lchild = T-> rchild;
T-> rchild = temp;
}
}
10.以先序次序输出一棵二叉树中所有结点的数据值以及结点所在的层数
int Data_Level ( BiTree T, int i) {
if ( T) {
visit ( T-> data, i) ;
Data_Level ( T-> lchild, i+ 1 ) ;
Data_Level ( T-> rchild, i+ 1 ) ;
}
}