//数组二叉树
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//输入:2 1 3 4 5 6 7 -1 -1 -1 -1 -1 -1 -1 -1
String[] str = sc.nextLine().split(" ");
int[] tree = new int[str.length];
for (int i = 0; i < str.length; i++) {
tree[i] = Integer.parseInt(str[i]);
}
List<Integer> list = route(tree,0);
//倒序排列
Collections.reverse(list);
//输出:2,1,4
System.out.println(list.toString().replace("[","").replace("]",""));
}
private static List<Integer> route(int[] tree,int index) {
if (tree[index]==-1){
return null;
}
List<Integer> treeleft = route(tree,2*index+1);
List<Integer> treeright = route(tree,2*index+2);
List<Integer> list = new ArrayList<>();
//左右为空,返回自身
if (treeleft==null&&treeright==null){
list.add(tree[index]);
return list;
}
//左空,返回右+自身
else if (treeleft==null) {
treeright.add(tree[index]);
return treeright;
}
//右空,返回左+自身
else if (treeright==null){
treeleft.add(tree[index]);
}else {
//左,右节点不为-1时进行比较,拿最开始插入(叶节点)比较那个小
if (treeleft.get(0) < treeright.get(0)) {
treeleft.add(tree[index]);
return treeleft;
} else {
treeright.add(tree[index]);
return treeright;
}
}
return null;
}