JSMS37-求二叉树的宽度-

125 阅读1分钟

二叉树的宽度实际上很好求,用层序遍历就可以解决,具体看下面代码的注释,懒得讲解了哈哈哈哈哈哈哈哈哈

int Width(tree *t)
{
	if(t!=NULL)
	{
		tree *queue[MAXSIZE];     //这里创建队列
		int front=0,rear=0;       //front记住头结点、rear队列尾部
		int MAX=0;                //树的宽度临时存储
		queue[++rear]=t;          //根节点进队
		while(t!=NULL&&front!=rear)      //树为空或者队列为空的时候弹出循环
		{
			int n=rear-front;       //这里n就是各层宽度,第一层为1,因为只有根节点
			if(n>MAX)
			{
				MAX=rear-front;   //MAX记录最大的宽度
			}
			for(int i=0;i<n;i++)    //进入循环先把一层遍历完,加进队列里面
			{
				t=queue[++front];   
				if(t->left!=NULL)  //左子树不为空加队
				{
					queue[++rear]=t->left;
				}
				if(t->right!=NULL)  //右子树不为空加队
				{
					queue[++rear]=t->right;
				}
			}
		}
		return MAX;	                 //这里是上面的树遍历完毕弹出,返回最大max
	}else 
	{
		return NULL;
	}
}