java 实现二叉树原理

1.创建二叉树类,包含节点(主要存储数据),注意存储的数据要实现Comparable接口

class BinaryTree {

private Node root;//根节点
private int count;//保存节点个数
private Object[] reData;//遍历输出数组
private int foot;

private class Node{//节点类
@SuppressWarnings("rawtypes")
private Comparable data;
private Node left;//左节点树
private Node right;//右节点树
public Node(Comparable data){
this.data = data;
}
//添加节点的方法
public void addNode(Node newnode) {
if (this.data.compareTo(newnode.data) >0) {//如果年龄小的添加在左节点
if (this.left ==null) {
this.left = newnode;
}else {
this.left.addNode(newnode);
}
}else {
if (this.right ==null) {
this.right = newnode;
}else {
this.right.addNode(newnode);
}
}
}
//把节点数据进行数组返回
public void toArrayNode() {
if (this.left !=null) {
this.left.toArrayNode();
}
BinaryTree.this.reData[BinaryTree.this.foot++] =this.data;
if (this.right!=null) {
this.right.toArrayNode();
}
}


}
//***************************添加数据
public void add(Object obj){
Comparable data = (Comparable)obj;
Node newnode = new Node(data);
if (this.root == null) {
this.root = newnode;
}else {
this.root.addNode(newnode);
}
this.count++;
}
//返回数据
public Object [] toArray(){
if (this.count>0) {
this.foot=0;
this.reData = new Object[this.count];
this.root.toArrayNode(); 
return this.reData;
}else {
return null;
}
}
}

2.创建数据

class Person implements Comparable<Person>{
private String name;
private int age;
public Person(String name,int age){
this.name = name;
this.age =age;
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
return this.age-o.age;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "姓名:"+this.name+",年龄:"+this.age;
}
}

3.测试

public class TestBinaryTree{
public static void main(String[] args) {
Person p1 = new Person("meimei", 19);
Person p2 = new Person("lisi", 29);
Person p3 = new Person("wangwu", 39);
Person p4 = new Person("zhangliu", 69);
BinaryTree bt = new BinaryTree();
bt.add(p1);
bt.add(p2);
bt.add(p3);
bt.add(p4);
System.out.println(Arrays.toString(bt.toArray()));
}
}

4.结果

[姓名:meimei,年龄:19, 姓名:lisi,年龄:29, 姓名:wangwu,年龄:39, 姓名:zhangliu,年龄:69]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值