非遞歸算法求二叉樹的深度

原理:
1.採用層次遍歷的方法,
2.設置變量level記錄當前結點所在層數,
3.設置變量last指向當前層最右結點,
4.每次層次遍歷出隊時,與last指針作比較,若兩者相等,那麼層數加1,
並讓last指向下一層最右結點,至少遍歷完成.level的值即爲二叉樹的高度

#include <stdio.h>
#include <stdlib.h>
typedef 1000 Maxsize;
typedef struct BiTree{
	int data;
	struct BiTree *rchild,*lchild;
};

int Btdepth(BiTree T){
	if (!T)
	{
		return 0; //樹空,高度爲0
	}
	int front=-1,rear=-1;
	int last=0,level=0; //last指向下一層第一個結點的位置
	BiTree Q[Maxsize],p; //設置隊列Q
	Q[++rear] = T; //將根結點入隊
	while(front<rear){ //隊不空,則循環
		p = Q[++front]; //隊列元素出隊,暨正在訪問的元素
		if (p.lchild)
		{
			Q[++rear] = p.lchild; //左孩子入隊,
		}
		if (p.rchild)
		{
			Q[++rear] = p.rchild;//右孩子入隊
		}
		if (front==last)//處理該層的最右結點
		{
			level++; //層數加一
			last = rear; //指向下一層
		}
		
	}
	return level;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章