import java.util.Arrays;/** * Demo class * * @author shier * @date 2021/3/27 */@SuppressWarnings("all")class BinaryTree { //现在实现一个二叉树 private class Node { //1.创建内部类保存节点数据 private Comparable data; //2.保存的操作数据,因为必须是Comparable的子类,且需判断大小 private Node left;//3.保存左边节点,左子树 private Node right;//4.保存右边节点,右子树 //5.初始化节点 public Node(Comparable data) { this.data = data; } //8.内部类添加节点 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); } } } //10.返回数据 依据左-中-右从小到大返回 public void toArrayNode() { if (this.left != null) {//左节点有数据,进入左节点 this.left.toArrayNode(); } //如果左节点没有数据,将自身节点(中)添加到结果集中 BinaryTree.this.retData[BinaryTree.this.foot++] = this.data; if (this.right != null) {//自身节点(中)添加到结果集中后,判断右节点有无数据,如果有就进入 this.right.toArrayNode(); } } } //-------------------------------------------// private Node root; //6.任何数据结构都要抓主一个根, private int count; //6.保存个数 private int foot = 0; //6.脚标 private Object[] retData;//6.返回数据 public void add(Object data) { //7.添加节点(元素)方法 if (data == null) { return; } Node newNode = new Node((Comparable) data); if (this.root == null) { //如果根节点还没有数据,保存到根节点 this.root = newNode; } else { //根节点有数据,交给内部类分开 this.root.addNode(newNode); } count++; //完成保存后 ++ } //9.返回数据 public Object[] toArray() { this.foot = 0; //脚标清0 this.retData = new Object[this.count]; this.root.toArrayNode();//10.从根节点进入,交给内部类 return this.retData; }}public class 二叉树 { public static void main(String[] args) { BinaryTree bt = new BinaryTree(); bt.add("G"); bt.add("X"); bt.add("C"); bt.add("Z"); bt.add("A"); System.out.println(Arrays.toString(bt.toArray())); }}//输出:[A, C, G, X, Z]