import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int[] answer;
static int N;
static int index=1;
static int[] nums;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
N = scanner.nextInt();
nums = new int[N + 1];
for (int i = 1; i <= N; i++) {
nums[i] = scanner.nextInt();
}
//排序完之后是结果树的中序遍历
Arrays.sort(nums);
answer = new int[N + 1];
traverse(1);
System.out.print(answer[1]);
for (int i = 2; i <= N; i++) {
System.out.print(" "+answer[i]);
}
}
/**
* 数组非常适用于完全二叉树的情况
* 对于有序二叉树,中序遍历结点的顺序是从小到大
* 刚好获得的有序结点也是从小到大
* 依次将有序结点对于中序遍历的访问次数一一赋值
*
* @param x 这次需要遍历结点的位置
*/
public static void traverse(int x) {
if (x > N) {
return;
}
traverse(x*2);
//中序遍历到的结点在answer[x]
//x从0开始
answer[x]=nums[index++];
traverse(x*2+1);
}
}
PAT甲级 1064 Complete Binary Search Tree(Java语言)
最新推荐文章于 2024-10-17 11:21:39 发布