需求
统计二叉树的深度和高度的算法
二叉树的链式存储结构
typedef struct Node{
int data;
struct Node *lchild;
struct Node *rchild;
} Node, *Tree;
算法
统计二叉树高度的算法
int maxDepth(Tree tree) {
if (tree == NULL) {
return 0;
}
int ldep = maxDepth(tree->left);
int rdep= maxDepth(tree->right);
if(ldep > rdep){
return ldep+1;
} else {
return rdep+1;
}
}
统计二叉树宽度的算法
#define MaxSize 100
typedef struct{
BiTree data[MaxSize];
int level[MaxSize];
int front,rear;
}Queue;
int getMaxWidth(Tree root){
Queue Qu;
Tree p;
int k,max,i,n;
Qu.front=Qu.rear=-1;
Qu.data[++Qu.rear]=root;
Qu.level[Qu.rear]=1;
while(Qu.front<Qu.rear){
Qu.front++;
p=Qu.data[Qu.front];
k=Qu.level[Qu.front];
if(p->lchild!=NULL){
Qu.data[++Qu.rear]=p->lchild;
Qu.level[Qu.rear]=k+1;
}
if(p->rchild!=NULL){
Qu.data[++Qu.rear]=p->rchild;
Qu.level[Qu.rear]=k+1;
}
}
max=0;
i=0;
k=1;
while(i<=Qu.rear){
n=0;
while(i<=Qu.rear&&Qu.level[i]==k){
n++;
i++;
}
k=Qu.level[i];
if(n>max){
max=n;
}
}
return max;
}
若想了解更为详尽的代码解析与说明,请查看这篇文章。