见toString和Node.class中的inOrder方法
package tree; import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; import java.util.List; /** * 排序二叉树 * E extends Comparable<E>指的是 * E这个类型要实现Comparable接口,这样方便比较大小 *@author Edward *@date 2020年7月1日---上午11:33:51 */ public class Tree <E extends Comparable<E>>{ // root存放根节点的引用 private Node root; public Node getRoot() { return root; } public void setRoot(Node root) { this.root = root; } /* * Node类用于描述二叉树中的某个节点,其中, * data用于存放数据(元素),left和right分别 * 存放其左右子树的引用。 */ class Node{ E data; Node left; Node right; Node(E e) { data = e; } public boolean append(E e) { // 相等不用添加(排序二叉树不允许重复元素) if (data.compareTo(e)==0) { return false; } // 如果要添加的元素比根节点元素小,则添加到左子树 if (data.compareTo(e)>0) { if (left==null) { left = new Node(e); return true; }else { return left.append(e); } }else { if (right==null) { right = new Node(e); return true; }else { return right.append(e); } } } // 用递归来写根本不需要考虑整体过程 // 只需要考虑核心的分解过程 // 是JVM中的栈做了底层实现 public void inOrder(StringBuilder sb) { // 左 if (left!=null) { left.inOrder(sb); } // 中 (本身) sb.append(data+","); // 右 if (right!=null) { right.inOrder(sb); } } } /** * 向二叉树当中添加某个元素 * @param e 被添加的元素 * @return 添加成功,返回true */ public boolean add(E e) { if (root==null) { root = new Node(e); return true; } return root.append(e); } public String toString(){ StringBuilder sb = new StringBuilder(); sb.append("["); root.inOrder(sb); sb.delete(sb.lastIndexOf(","), sb.length()); return sb.append("]").toString(); }