南阳oj 小猴子下落

http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=63

小猴子下落

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描述

有一颗二叉树,最大深度为D,且所有叶子的深度都相同。所有结点从左到右从上到下的编号为1,2,3,·····,2的D次方减1。在结点1处放一个小猴子,它会往下跑。每个内结点上都有一个开关,初始全部关闭,当每次有小猴子跑到一个开关上时,它的状态都会改变,当到达一个内结点时,如果开关关闭,小猴子往左走,否则往右走,直到走到叶子结点。

一些小猴子从结点1处开始往下跑,最后一个小猴儿会跑到哪里呢?

输入

输入二叉树叶子的深度D,和小猴子数目I,假设I不超过整棵树的叶子个数,D<=20.最终以 0 0 结尾

输出

输出第I个小猴子所在的叶子编号。

样例输入

4 2
3 4
0 0

样例输出

12
7

来源

[张洁烽]原创

上传者

张洁烽

原理:用层次遍历法建立二叉树!!!

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define max 100000
typedef struct node
{
	int data;
	int flag;
	struct node *lchild;
	struct node *rchild;
}btnode;
int num,I;
void creat(btnode *&b,int d)
{
	btnode *q[max],*p,*lnode,*rnode;
	int front,rear,h=1;
	front=rear=0;
	b=(btnode *)malloc(sizeof(btnode));
	b->data=++num;
	b->flag=0;
	b->lchild=b->rchild=NULL;
	q[++rear%max]=b;
	while(h<=pow(2,d)-2)
	{
		p=q[++front%max];//chu queue
		lnode=(btnode *)malloc(sizeof(btnode));
	    lnode->data=++num;
	    lnode->flag=0;
	    lnode->lchild=lnode->rchild=NULL;/////
		p->lchild=lnode;
        q[++rear%max]=lnode;
        h++;
		rnode=(btnode *)malloc(sizeof(btnode));
	    rnode->data=++num;
	    rnode->flag=0;
	    rnode->lchild=rnode->rchild=NULL;//////
		p->rchild=rnode;
        q[++rear%max]=rnode;
		h++;
	}
}//level 水平建立层次树,与层次遍历原理相同,除此外还有  前中后序建立法(递归)。
void fun(btnode *b,int i)
{
	if(b!=NULL)
	{
		if(b->lchild==NULL)
		{
			if(i==I-1)
			   printf("%d\n",b->data);
		}
		else if(b->flag==0)
		{
			b->flag=1;
			fun(b->lchild,i);
		}
		else
		{
			fun(b->rchild,i);
			b->flag=0;
		}
	}
}
void level(btnode *b)
{
	btnode *q[max],*p;
	int front,rear;
	front=rear=0;
	q[++rear%max]=b;
	while(front!=rear)
	{
		p=q[++front%max];
		printf("%d ",p->data);
		if(p->lchild!=NULL)
			q[++rear%max]=p->lchild;
		if(p->rchild!=NULL)
			q[++rear%max]=p->rchild;
	}
}
int main()
{
	btnode *b;
	int d,i;
    while(~scanf("%d%d",&d,&I))
	{
		if(d==0)
			break;
		num=0;
		creat(b,d);
		//level(b);
		//printf("\n");
		for(i=0;i<I;i++)
			fun(b,i);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/shenyulingyeye/article/details/81583471
今日推荐