数据结构与算法--顺序存储二叉树
简介
二叉树的存储结构有两种,分别为顺序存储和链式存储
顺序存储只适用于完全二叉树
-
顺序存储的完全二叉树的特征(n表示二叉树中第几个元素,按0开始编号)
-
第n个元素的左子节点为2n+1
-
第n个元素的右子节点为2n+2
-
第n个元素的父节点为(n-1)/2
-
-
如果想顺序存储普通二叉树,需要提前将普通二叉树转化为完全二叉树
-
普通二叉树转完全二叉树的方法很简单,只需给二叉树额外添加一些节点,将其"拼凑"成完全二叉树即可
-
顺序存储二叉树基础遍历
前序遍历
import java.util.LinkedList;
import java.util.Queue;
public class ArrayBinaryTree<K> {
/**存储数据结点的数组*/
public K[] array;
public ArrayBinaryTree(K[] array) {
this.array = array;
}
/**前序遍历*/
public Queue<K> preErgodic(){
Queue<K> queue = new LinkedList<>();
if (array == null || array.length == 0) {
return queue;
}
preErgodic(0,queue);
return queue;
}
public void preErgodic(int index,Queue<K> queue){
queue.add(array[index]);
//向左,递归遍历
if ((2 * index + 1) < array.length) {
preErgodic(2 * index + 1,queue);
}
//向右,递归遍历
if ((2 * index + 2) < array.length) {
preErgodic(2 * index + 2,queue);
}
}
}
中序遍历
import java.util.LinkedList;
import java.util.Queue;
public class ArrayBinaryTree<K> {
/**存储数据结点的数组*/
public K[] array;
public ArrayBinaryTree(K[] array) {
this.array = array;
}
/**中序遍历*/
public Queue<K> midErgodic(){
Queue<K> queue = new LinkedList<>();
if (array == null || array.length == 0) {
return queue;
}
midErgodic(0,queue);
return queue;
}
public void midErgodic(int index,Queue<K> queue){
//向左,递归遍历
if ((2 * index + 1) < array.length) {
midErgodic(2 * index + 1,queue);
}
queue.add(array[index]);
//向右,递归遍历
if ((2 * index + 2) < array.length) {
midErgodic(2 * index + 2,queue);
}
}
}
import java.util.LinkedList;
import java.util.Queue;
public class ArrayBinaryTree<K> {
/**存储数据结点的数组*/
public K[] array;
public ArrayBinaryTree(K[] array) {
this.array = array;
}
/**后续遍历*/
public Queue<K> afterErgodic(){
Queue<K> queue = new LinkedList<>();
if (array == null || array.length == 0) {
return queue;
}
afterErgodic(0,queue);
return queue;
}
public void afterErgodic(int index,Queue<K> queue) {
//向左,递归遍历
if ((2 * index + 1) < array.length) {
afterErgodic(2 * index + 1, queue);
}
//向右,递归遍历
if ((2 * index + 2) < array.length) {
afterErgodic(2 * index + 2, queue);
}
queue.add(array[index]);
}
}