二叉树(一)---二叉树的三种创建方法

本文探讨了二叉树的三种创建方法,重点讲解了如何在二叉链表基础上添加parent指针,形成三叉链表,以实现对二叉树节点的上行和下行访问。内容包括理论解释和实际应用示例。
摘要由CSDN通过智能技术生成

一、顺序存储
利用满二叉树的性质,每层的节点数1,2,4,8......,所以一颗深度为i的二叉树最多只能包含2 (i) - 1 (i是以指数的形式求出来的,此处利用等比数列求和),因此需要设置一个相同长度的数组来存储这个二叉树,若是空出来的节点,则数组元素留空即可。

参考代码:
public class ArrayBinaryTree<T> {

	//使用数组来存储它的所有节点
	private Object[] datas;
	private int DEFAULT_DEEP = 10;
	
	//记录该树的深度
	private int deep;
	private int arraySize;
	
	//默认的深度创建一个二叉树
	public ArrayBinaryTree(){
		this.deep = DEFAULT_DEEP;
		this.arraySize = (int)Math.pow(2, deep) - 1;//等比数列求和
		datas = new Object[arraySize];
	}
	
	//以指定深度创建一个二叉树
	public ArrayBinaryTree(int deep){
		this.deep = deep;
		this.arraySize = (int)Math.pow(2, deep) - 1;
		datas = new Object[arraySize];
	}
	
	//以指定深度和指定的创建一个二叉树
	public ArrayBinaryTree(int deep, T root){
		this.deep = deep;
		this.arraySize = (int)Math.pow(2, deep) - 1;
		datas = new Object[arraySize];
		datas[0] = root;
	}
	
	/**
	 * 为指定的节点添加子节点
	 * @param index 需要添加的子节点的父节点的索引
	 * @param data 新的节点的数据
	 * @param left 是否为左节点
	 */
	public void addNode(int index, T data, boolean left){

		if(datas[index] == null){
			throw new RuntimeException("空节点,无法添加!");
		}
		if(2 * index + 1 >= arraySize){
			throw new RuntimeException("底层已满,越界异常!");
		}
		if(left){
			datas[2 * index + 1] = data;
		}
		else{
			datas[2 * index + 2] = data;
		}
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值