暴力解法
public void test(){
int dept;
int balls;
int currentBall =1 ;
boolean[] tree;
dept = 20;
balls = 4;
tree = new boolean[(1<<dept)-1];
int currentDept = 1;
System.out.println(tree.length);
int currentLoc = 1;
while(balls>0){
while(currentDept<dept){
if(!tree[currentLoc-1]){
tree[currentLoc-1] = !tree[currentLoc-1];
currentLoc = currentLoc*2;
}else{
tree[currentLoc-1] = !tree[currentLoc-1];
currentLoc = currentLoc*2+1;
}
currentDept++;
}
System.out.println("这是第"+currentBall+"个。"+'\t'+"currentLoc is :"+currentLoc);
balls--;
currentDept = 1;
currentLoc = 1;
currentBall++;
}
}
优化解法
// 对于某个节点,对于第n个球,n%2==0的向右,否则向左
public void test2(int paramDept,int paramBalls){
int dept = paramDept;
int balls = paramBalls;
int currentBall = 1;
int currentLoc = 1;
while(balls>0){
currentBall= balls;
while(dept-->1){
if(currentBall%2==0){ // turn right
currentBall = currentBall/2;
currentLoc = currentLoc*2+1;
}else{ // turn left
currentBall = (currentBall+1)/2;
currentLoc = currentLoc*2;
}
}
System.out.println(currentLoc);
dept = paramDept;
currentLoc = 1;
balls--;
}
}