第二题输入其实是按层遍历。。
剑指offer上的题
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String in = sc.nextLine();
String target = sc.nextLine();
String[] items = in.split(",");
System.out.println(Arrays.toString(items));
int index = 0;
for (int i = 1; i <= items.length; i++) {
if(items[i-1].equals(target))
index = i;
}
if(index == 0) {System.out.println(-1);return;}
// 有右子树
if(index * 2 + 1 <= items.length){
// 找右子树的最左
int left = index * 2 + 1;
while(left * 2 <= items.length){
left *= 2;
}
System.out.println(left);
return;
}else{ //梅子树 在判断
if(index == 1){
System.out.println(-1);return;
}
while(index != 1) {
int p = findP(index);
if (isLeft(index)) { //当前是父节点的左
System.out.println(p);
return;
} else { // 当前是父节点的right
index = p;
}
}
System.out.println(-1);
}
}
public static int findP(int index){
return index / 2;
}
public static boolean isLeft(int index){
if((index & 1) == 0)
return true;
return false;
}