- /**
- * 二叉树加入节点,以及按照中序排序.
- */
- class BinaryTree<T extends Comparable<T>> {
- private Node root;// 二叉树的根节点
- class Node {
- private T data;
- private Node left;// 左节点
- private Node right;// 右节点
- public Node(T data) {
- this.data = data;
- }
- /**
- * 添加节点
- *
- * @param newNode
- * 要添加的节点,按中序排序.
- */
- public void addNode(Node newNode) {
- if (newNode.data.compareTo(this.data) <= 0) {
- if (this.left == null) {
- this.left = newNode;
- } else {
- this.left.addNode(newNode);
- }
- }
- if (newNode.data.compareTo(this.data) > 0) {
- if (this.right == null) {
- this.right = newNode;
- } else {
- this.right.addNode(newNode);
- }
- }
- }
- /**
- * 按中序遍历并打印.
- */
- public void printNode() {
- if (this.left != null) {
- this.left.printNode();
- }
- System.out.println(this.data);
- if (this.right != null) {
- this.right.printNode();
- }
- }
- }
- /**
- * 为二叉树增加一个节点,如果没有根节点,新增的节点就为根节点,否则将按照中序,为根节点增加新的节点.
- *
- * @param data
- * 节点中的的一个属性,此属性的类型不确定,通过实例化二叉树来决定此数据的具体类型.
- */
- public void add(T data) {
- Node newNode = new Node(data);
- if (this.root == null) {
- this.root = newNode;
- } else {
- this.root.addNode(newNode);
- }
- }
- /**
- * 将二叉树的所有节点按中序打印出来
- */
- public void print() {
- this.root.printNode();
- }
- }
- public class BinaryTreeTest {
- public static void main(String[] args) {
- BinaryTree<Integer> bt = new BinaryTree<Integer>();
- bt.add(3);
- bt.add(5);
- bt.add(1);
- bt.add(0);
- bt.add(1);
- bt.add(9);
- bt.print();
- }
- }
复制代码 |