这几天,想起了大学时学过的树结构,当时也仅仅是学了概念性的东西。也没动手写点什么代码。故打算用数组实现二叉树结构
生成二叉树所需设计的对象:
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);
}
}
通过以上代码实现了根据数组构建二叉树,谨以此备忘。