二叉树的宽度

二叉树的宽度就是每一层的宽度的最大值

要求二叉树的宽度,不许先求出每一层的宽度,求每一层的宽度必须知道每一层的元素

作为初学的我,看到树本来就是从括号表示来的,所以我在这里借助里开始时候的树的括号表示的字符串,对每一个元素都在字符串中查找并进进行括号匹配返回留下有括号的个数就是树的节点的层次。

其实,我的最外面的一层循环就是层次查找,所以每一次都是讲同一层的元素放在一块。

int WidthBT(BTNode *b,char str[])
{
	BTNode *St[MaxSize],*p;
	int front,rear,tier,tier1=0;
	int s=1,max=0;
	char ch;
	front=rear=-1;
	if(b!=NULL)
	{
		rear++;
		St[rear]=b;
		while(front!=rear)
		{
			p=St[front];
			ch=str[0];
			int j=0;
			char ch1[MaxSize];
			int top=-1;
			front=(front+1)%MaxSize;
			tier=0;
			while(str[j]!=p->date)
			{
				if(str[j]=='(')
					ch1[++top]='(';
				else if(str[j]==')')
					top--;
				j++;
			}
			tier=top+1;
			if(tier1==tier)
				s++;
			else
			{
				max=s>max?s:max;
				s=1;
			}
			tier1=tier;
			if(p->lchild!=NULL)
			{
				rear=(rear+1)%MaxSize;
				St[rear]=p->lchild;
			}
			if(p->rchild!=NULL)
			{
				rear=(rear+1)%MaxSize;
				St[rear]=p->rchild;
			}
		}
	}
	return max;
}

初学数据结构,不太懂,希望看到的大神能够多多指教。

原文地址:https://www.cnblogs.com/ke-yi-/p/10175873.html