非递归算法思想:采用层次遍历算法的思想用high来记录树的高度,初始值设为0,设置一个last指针指向最右边的结点,当front指向last时high+1。让last指向下一层最右边的结点,直到遍历完成,high的值即为树的高度
代码:
int SER(BiTree T){
if(T==NULL)//如果树为空
return 0;//返回树高为0
BiTree Q[Maxsize];//初始化一个队列
int high=0,last=0//high表示树的高度,last指向二叉树每层的最右边结点
int front=-1,rear=-1;//分别设置队头指针和队尾指针初始时指向同一个位置
BiTree p;//定义一个p结点用来遍历二叉树
Q.[++rear]=T;//根节点入队
if(front p=Q.[++front];//队列元素出队 if(p->lchild!=NULL)//如果左孩子不为空 Q.[++rear]=p->lchild;//左孩子入队 if(p->rchild!=NULL)//如果右孩子非空 Q.[++rear]=p->rchild;//右孩子入队 if(front==last){//处理最右结点 high++;//高度增加 last=rear;//last指向这层最右结点 } } return high;//返回树高 }