Question:假设二叉树采用二叉链表存储结构,设计一个非递归算法求二叉树的高度。
Analysis:
1.用层次遍历来获得二叉树的高度; 2.对二叉树进行层次遍历,需要借助队列; 3.每次遍历到该层的最右边的结点时,level+1; 4.该算法的关键时,如何知道当前的结点是不是该层最后一个结点(last ==rear);
Code:
//二叉链表的结构 typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //层次遍历二叉树 int GetBiTreeHeigth(BiTree T){ if(T==NULL) retrun 0; //空树,高度为0; InitQueue Q[MaxSize]; //初始化一个空队列; int front =-1,rear=-1; int last=0; int level =0; BiTree P; //EnQueue(Q,T); //将当前结点入队; Q[++rear] = T; while(front <rear){ P = Q[++front]; //出队,DeQueue(Q,Q.front); //访问当前结点visit(T); if(P->lchild){ Q[++rear] = P->lchild; //EnQueue(Q,T->lchild); } if(P->rchild){ Q[++rear] = P->rchild; //EnQueue(Q,T->rchild); } if(front==last){//当前层最后结点; level++; last=rear; } } return level; }