- 二叉树也可以用数组来存储,
- 给定一个数组,树的根节点的值储存在下标1,
- 对于储存在下标n的节点,他的左子节点和右子节点分别储存在下标2n和2n+1,
- 并且我们用-1代表一个节点为空,
- 给定一个数组存储的二叉树,
- 试求从根节点到最小的叶子节点的路径,路径由节点的值组成。
/**
* 分析:因为需要找到最小的叶子节点的路径,所以需要知道层数,只判断最下面一层的数量即可
* 已知二叉树的元素数量为:
* 第一层:1--> 2^1 - 1
* 第二层:2--> 2^2 - 1
* 第三层:4--> 2^3 - 1
* 第四层:8--> 2^4 - 1
* ***
* 第n层:2^(n - 1) --> 2^n - 1
*
* @param arr 模拟树的数组
*/
public void answer(int[] arr) {
//最小叶子节点的角标
int index = 0;
//遍历,找到最小的叶子节点
int min = Integer.MAX_VALUE;
for (int i = 1; i < arr.length; i++) {
if (arr[i] != -1) {
if (i < arr.length / 2) {
if (arr[2 * i] == -1 && arr[2 * i + 1] == -1) {
if (min > arr[i]) {
min = arr[i];
index = i;
}
}
}else {
if (min > arr[i]) {
min = arr[i];
index = i;
}
}
}
}
while (index > 0) {
System.out.print(arr[index]);
index = index / 2;
if (index > 0){
System.out.print(" ");
}
}
}