我们这次来使用java简单的实现二叉树的添加保存和取值功能。利用Comapareble接口实现二叉树的对象数据比较,利用中序遍历的方法取得对象数组值并返回。
package test; class BinnaryTree{ //定义二叉树 private class Node{ private Comparable data; //定义要保存的数据,数据需要比较要实现Comparable private Node left; //定义左节点 private Node right; //定义右节点 public Node(Comparable data){ //保存数据 this.data = data; } public void addNode(Node newNode) { if(newNode.data.compareTo(this.data)>=0){ //传入的数据和当前节点数据比较,比它大则放右边小则放左边 if(this.right==null){ this.right = newNode; }else{ this.right.addNode(newNode); } }else{ if(this.left == null){ this.left = newNode; }else{ this.left.addNode(newNode); } } } public void toArrayNode() { //采用中序遍历的方法取值 if(this.left!=null){ this.left.toArrayNode(); } BinnaryTree.this.retArray[BinnaryTree.this.foot++] = this.data; if(this.right != null){ this.right.toArrayNode(); } } } private Node root = null; //定义根节点 private int count = 0; //定义一个数据值 private int foot = 0; //定义下标,数组索引下标取值时使用 private Object retArray[]; public void add(Object data){ //增加数据 if(data==null){ return ; } Node newNode = new Node((Comparable)(data)); //向下转型,如果不是Comparable对象的子类则抛出异常 if(this.root == null){ this.root = newNode; }else{ this.root.addNode(newNode); } this.count++; } public boolean isEmpty(){ //判断是否为空 return this.count==0 && this.root==null; } public int size(){ //取得当前二叉树的长度 return this.count; } public Object[] toArray(){ //通过Object对象数组取值 if(this.isEmpty()){ return null; } retArray = new Object[this.count]; this.foot = 0; this.root.toArrayNode(); return this.retArray; } } public class Test { //定义测试类 public static void main(String[] args) { BinnaryTree bt = new BinnaryTree(); bt.add("C"); bt.add("B"); bt.add("W"); bt.add("E"); bt.add("G"); bt.add("H"); bt.add("A"); bt.add("N"); System.out.println("二叉树是否为空:"+bt.isEmpty()+",总共有"+bt.size()+"个数据"); Object[] obj = bt.toArray(); for (int i=0; i<obj.length ; i++){ String str = (String)obj[i]; System.out.println(str); } } }