java语言实现二叉树

  1. 创建一个类,这个类中有根、数值、左孩子、右孩子;
  2. 数据可以通过数组赋值给树结构中的值,所以可以加一个链表级别的数据域,存放每个节点的数据;
  3. 给节点填值;
  • 代码

public class TreeFirst {

	private Object value; //单个数据
	private TreeFirst leftChild;  //做孩子
	private TreeFirst rightChild; //右孩子
	public  TreeFirst root;
	public  List<TreeFirst> datas;
	
	public TreeFirst(TreeFirst leftChild, TreeFirst rightChild, Object value) {
		this.leftChild = leftChild;
		this.rightChild = rightChild;
		this.value = value;
	}
	
	public TreeFirst() {
	}

	public TreeFirst(Object value) {
		this.value = value;
	}
	
	//创建一棵树
	public void createBinTree(Object[] objs) {
		datas = new ArrayList<TreeFirst>();
		for (Object object : objs) {
			datas.add(new TreeFirst(object));  //将一个数组装入一个列表中;
		}
		//将第一个数值赋给根
		root = datas.get(0);

		for(int i = 0; i < datas.size()/2; i++) {
			datas.get(i).leftChild = datas.get(2*i+1);
			System.out.print(datas.get(i).leftChild.value + " ");
			if(2*i+2 < datas.size()) {  //因为列表中的第一个元素给了根,所以需要考虑
				datas.get(i).rightChild = datas.get(2*i+2);
				System.out.print(datas.get(i).rightChild.value + " ");
			}
		}
		
	}

    public static void main(String[] args) {
		Object[] objs = {1,2,3,4,5,6,7,8,9,10,11};
		TreeFirst first = new TreeFirst();
		first.createBinTree(objs);
}

结果:

2 3 4 5 6 7 8 9 10 11 

datas.get(i).rightChild = datas.get(2*i+2); 这行代码看起来挺难理解的,刚才我也在想这个是怎么回事,后来我想了一个接近于正确说法的答案:datas.get(i)是给每一个根节点赋值,例如,1作为根节点,2与3都是1的左右孩子,抛去1根节点,从1的左孩子节点与右孩子节点分别是datas的第0和1个节点,这也是递归。上述顺序是按照层级铺展的顺序给每个节点填值的。这就算创建了一个节点值了,明天有时间写三种遍历方法~

好好学习,不要让任何人打乱你的节奏~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值