算法思想:
采用层次遍历的算法,设置变量level记录当前节点所在的层数,设置变量last指向当前层最右边的节点,每次层次遍历出队时与last指针作比较,若两者相等,则层数+1,并让last指向下一层的最右节点,直到遍历完成。level即为二叉树的高度。
算法实现
int btDepth(Bitree bt){ if(!bt){ return 0; //若二叉树为空则返回0 } int front=-1,rear=-1; //用front,rear双指针分别指向当前层遍历到的节点数和下一层节点中共有 //的节点数 int last=0,level=0; //last指向当前层的节点总数 BiTree Q[MaxSize] Q[++rear]=bt; BiTree p; while (front<rear) { p=Q[++front]; //将当前遍历到的节点出队 if(p->lchild){ Q[++rear]=p->lchild; } if(p->rchild){ Q[++rear]=p->rchild; //若有左右节点入队 } if(front==last){ //如果当前遍历到的节点已经是当前层最后一个节点,则更新last为下一层 // 的节点数,并且将层数加1 level++; last=rear; } } return level; }