1.什么是顺序二叉树
从数据存储而言,数据存储的方式和树的存储方式可以进行相互的转换,即: 数组可以转换为树,而树可以转换为数组
2.顺序二叉树的特点
. 顺序二叉树一般只考虑完全二叉树
. 顺序二叉树第n个元素的左子节点为2*n+1
. 顺序二叉树第n个元素的右子节点为2*n+2
. 顺序二叉树第n个元素的父节点为(n-1)/2
康康图解:
3.如何进行数组和顺序二叉树之间的转换?
假设现在有一个需求: 要求以树的方式存放arr{1,2,3,4,5,6,7} (参考上图摆放位置)
在遍历该数组的时候可以使用前序,中序,后序方法(这里以前序遍历为例)
4.康康代码
. 首先已知了需要完成前序遍历(根,左右)
. 相当于按照根(arr[index]), 左(arr[2*index+1]), 右(arr[2*index+2])的顺序进行遍历
. 注意: 数组不能越界
public void preOrder(int index){
if(arr==null || arr.length==0){
System.out.println("数组为空,不能按照二叉树的前序遍历");
}
//开始前序遍历
//输出该元素
System.out.print(arr[index]+" ");
//向左递归
if((index*2+1)<arr.length){
preOrder(2*index+1);
}
//向右递归
if((index*2+2)<arr.length){
preOrder(2*index+2);
}
//中序 左根右 后序 左右根
}
然后可以在主函数中进行调用
package tree_op.array_for_tree;
/**
* 完成顺序二叉树的遍历
* 数组可以完成类似二叉树一样的遍历
*/
public class ArrayBinaryTreeDemo {
public static void main(String[] args) {
int []arr = {1, 2, 3, 4, 5, 6, 7};
ArrBinaryTree tree=new ArrBinaryTree(arr);
tree.preOrder();
}
}
//方法的重载 如果采用无参方法,自动调用有参(方便调用)
public void preOrder(){
this.preOrder(0);
}