注意考虑数组下标和二叉树的一一对应。
顺序存储二叉树其实就是树与数组之间的转化,将数组这个顺序存储的结构转化成二叉树来遍历
代码实现:
要注意的是记得向左遍历向右遍历递归的时候注意判断是否数组越界
package Tree;
/**
* 顺序存储二叉树
* 数组是顺序存储的,但是用二叉树的前序遍历完成对数组元素的遍历
* 其实就相当于用数组来存储二叉树的数据
*/
public class ArrBinaryTreeDemo {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 6, 7};
ArrBinaryTree arrBinaryTree = new ArrBinaryTree(arr);
arrBinaryTree.preOrder();
}
}
class ArrBinaryTree {
private int[] arr;//用来存储节点的数组
public ArrBinaryTree(int[] arr) {
this.arr = arr;
}
//方法重载
public void preOrder() {
this.preOrder(0);
}
//前序遍历
public void preOrder(int n) {
//判断传入的数组是不是空
if (arr.length == 0 || arr == null) {
System.out.println("数组为空,无法遍历");
return;
}
System.out.println(arr[n]);//输入当前节点
//向左前序遍历
if ((2 * n + 1) < arr.length) {
preOrder(2 * n + 1);
}
//向右进行前序遍历
if ((2 * n + 2) < arr.length) {
preOrder(2 * n + 2);
}
}
}