非递归实现
基于层序遍历思想,使用队列操作结点,从根节点开始入队,出队后判断左右子树,如果当前结点有左右子树则将子树入队,并且判断是否访问到这一层最右端结点,层数加1.
void Height(BiTree T){
BiTree Q[maxsize]; //创建一个队列存储二叉树类型结点
int front =0 , rear = 0; //初始化队列的队头与队尾
int last=0, level=0; //初始层数和末尾结点
if(!T){
return ;
}
BiTNode *p = T; //设一个指针指向T进行操作
Q[++rear] = p; //当前结点入队
while(rear!=front){ //队列非空状态
p = Q[front++]; //出栈时,队头指针后移
if(p->lchild){
Q[++rear] = p->lchild; //子节点入队进行递归
}
if(p->rchild){
Q[++rear] = p->rchild;
}
if(rear == last){ //判断是否访问过入栈的结点,是则表示该层遍历结束
level++; last = rear;
}
}
return level;
}
递归实现:先分别递归计算左、右子树的高度,最后取最大值的层数加上根节点的层数为最终结果
int Height(BiTree){
int left_Height, right_Height;
left_Height = Height(T->lchild);
right_Height = Height(T->rchild);
if(left_Height > right_Height){
return left_Height+1; //加一个根节点
}else{
return right_Height+1;
}
}