奇安信Java笔试第二题
为啥一直0%呀
package interview.qianxin; import java.util.Scanner; /** * @author Aayers-ghw * @date 2019/9/9 19:54 */ public class Solution02 { /** * 二元查找树(1.若左子树不空,左子树值都小于父节点;2.如右子树不空,右子树值都大于父节点;3.左、右子树都是二元查找树;4. 没有键值相等的节点)上任意两个节点的值,请找出它们最近的公共祖先。 * <p> * 输入三行行,第一行为树层级,第二行为数节点(其中-1表示为空节点),第三行为需要查找祖先的两个数。 * <p> * 在例图中(虚线框没有真实节点,为了输入方便对应位置输-1)查找12和20的最近公共祖先输入为: * <p> * 4 * <p> * 9 6 15 2 -1 12 25 -1 -1 -1 -1 -1 -1 20 37 * <p> * 12 20 * * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = Integer.parseInt(scanner.nextLine()); String[] str = scanner.nextLine().split(" "); int[] nums = new int[str.length + 1]; for (int i = 1; i < nums.length; ++i) { nums[i] = Integer.parseInt(str[i - 1]); } int m1 = scanner.nextInt(); int m2 = scanner.nextInt(); int cnt = 0; for (int i = 1; i < nums.length; ++i) { if (nums[i] == m1 || nums[i] == m2) { cnt++; } } if (cnt != 2) { System.out.println(-1); return; } int index = 1; while (--n >= 0) { if (nums[index] == -1) { System.out.println(-1); break; } if (nums[index] == m1 || nums[index] == m2) { System.out.println(nums[index]); break; } if (nums[index] > Math.min(m1, m2) && nums[index] < Math.max(m1, m2)) { System.out.println(nums[index]); break; } if (nums[index] < Math.min(m1, m2)) { index = index * 2 + 1; } else { index = index * 2; } } System.out.println(-1); } } }