我们用数组来实现二叉树(顺序二叉树)
二叉树的结构
用数组来存储节点
算法代码
/**
*
* @ClassName: TreeNode
* @Description: 树的节点
* @author: fuling
* @date: 2020年8月23日 下午2:24:06
*/
public class TreeNode {
private int id;
private String ele;
public TreeNode() {
super();
// TODO Auto-generated constructor stub
}
public TreeNode(int id, String ele) {
super();
this.id = id;
this.ele = ele;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getEle() {
return ele;
}
public void setEle(String ele) {
this.ele = ele;
}
@Override
public String toString() {
return "TreeNode [id=" + id + ", ele=" + ele + "]";
}
/**
*
* @ClassName: ArrayBinaryTree
* @Description: 数组实现的二叉树(顺序二叉树),顺序二叉树通常只考虑完全二叉树
* @author: fuling
* @date: 2020年8月23日 下午4:11:32
* 当前节点(下标i)的左节点下标2i + 1,右节点2i + 2,父节点(i-1)/2
*/
public class ArrayBinaryTree {
private TreeNode[] arr;//存储树节点的数组
public ArrayBinaryTree(TreeNode[] arr) {
super();
this.arr = arr;
}
/**
*
* @Title: preOrder
* @Description: 前序遍历
* @return: void
* @throws RuntimeException 数为空,则抛异常
*/
public void preOrder() {
if(arr == null)throw new RuntimeException("树为空!");
preOrder(0);
}
/**
*
* @Title: preOrder
* @Description: 前序遍历
* @param: @param index 当前元素的下标
* @return: void
*/
public void preOrder(int index) {
System.out.println(arr[index]);
//如果有左子树则遍历左子树
if(index * 2 + 1 < arr.length)preOrder(index * 2 + 1);
//如果有右子树则遍历右子树
if(index * 2 + 2 < arr.length)preOrder(index * 2 + 2);
}
}
源码:github地址