二叉树之小球下落

来源:互联网 发布:mac 笔刷怎么安装方法 编辑:程序博客网 时间:2024/04/27 00:02

题目是白书上面的,

就是一个二叉树,供你输入层数和下落的小球个数,求最后一个小球下落所在的叶子编号。

代码:

#include<stdio.h>#include<string.h>const int maxn=20;int s[1<<maxn];int main(){    int D,I,k;    while(scanf("%d%d",&D,&I)!=EOF)    {        memset(s,0,sizeof(s));        int n=(1<<D)-1;        for(int i=0;i<I;i++)        {            k=1;            for(;;)            {                s[k]=!s[k];                k=s[k]>0?k*2:k*2+1;                if(k>n) break;            }        }        printf("%d\n",k/2);    }    return 0;}
要注意以下几点:

二叉树的基本概念就是D层的二叉树最多有1<<D-1个节点,第I层有2的i次方减一个节点,

然后就是个人的学习笔记:首先数据的范围,一直没有注意过数据的范围,UVaoj第一题就错了无数次,就是错在数据范围,然后被花姐骂..= =

这一题一样也要注意数据范围这个,其实后面的解释我也没怎么看懂。。==

然后就是左移与右移,这个以前学过,不知道怎么回事,又忘了,好悲伤,左移n位相当于二的n次方,就是这样了。


0 0
原创粉丝点击