根据数组创建二叉树

这几天,想起了大学时学过的树结构,当时也仅仅是学了概念性的东西。也没动手写点什么代码。故打算用数组实现二叉树结构

生成二叉树所需设计的对象:

1.二叉树节点

2.二叉树结构(包含树的构造方法、树的先序遍历、数据仿广度遍历)

下面就直接贴代码了。

首先是树的基本元素——树节点

public class BinaryTreeNode {
	
	BinaryTreeNode left;
	BinaryTreeNode right;
	int index;
	int data;
	
	public BinaryTreeNode()
	{
		
	}
	public BinaryTreeNode(int index,int data,BinaryTreeNode left,BinaryTreeNode right)
	{
		this.index = index;
		this.data = data;
		this.left = left;
		this.right= right;
	}
	public void print()
	{
		System.out.println("数组中索引位置:"+ index);
		System.out.println("节点值为:" + data);
	}
}


定义树结构及遍历算法:

public class BinaryTree {
	BinaryTreeNode root;
	int[] dataSource;

	public BinaryTree(int[] source) {
		this.dataSource = source;
		this.root = new BinaryTreeNode();
		this.root.index = 0;

	}

	public void generateRoot(BinaryTreeNode node) {
		if (node.index < dataSource.length) {
			if (node != null) {
				node.data = dataSource[node.index];
				System.out.println("数组中索引地址:" + node.index + "  节点值:"
						+ node.data);
				node.left = createLeft(node);
				node.right = createRight(node);

			}
		}
	}

	public BinaryTreeNode createLeft(BinaryTreeNode node) {
		if (node != null) {
			node.left = new BinaryTreeNode();
			node.left.index = 2 * node.index + 1;
			generateRoot(node.left);
		}
		return node.left;
	}

	public BinaryTreeNode createRight(BinaryTreeNode node) {
		if (node != null) {
			node.right = new BinaryTreeNode();
			node.right.index = 2 * node.index + 2;
			generateRoot(node.right);
		}
		return node.right;
	}

	public void preOrderTranverse(BinaryTreeNode node) {
		if (node != null) {
			System.out.print(node.data);
			preOrderTranverse(node.left);
			preOrderTranverse(node.right);
		}
	}

	public void preOrderWideTranverse(BinaryTreeNode node) {
		if (node != null) {
			if (node.data == 0) {
				return;
			}
			System.out.println(node.data);
			System.out.print(node.left != null ? "-" + node.left.data : "");
			System.out.print(node.right != null ? "-" + node.right.data : "");
			preOrderWideTranverse(node.left);
			preOrderWideTranverse(node.right);
		}
	}
}


客户端调用代码:

public class Client 
{
	public static void main(String[] args)
	{
		int source[] = {1,2,3,4,5,6,7,8};
		BinaryTree tree = new BinaryTree(source);
		tree.generateRoot(tree.root);
//		tree.preOrderTranverse(tree.root);
		tree.preOrderWideTranverse(tree.root);
	}
}


通过以上代码实现了根据数组构建二叉树,谨以此备忘。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值