package com.hyc.test.tree;
import org.w3c.dom.Node;
/**
* 类说明 :二叉树的排序器
*
* @author hyc
* @version 1.0
* @date 2021/9/21 16:39
*/
public class BinaryTreeSort<E extends Integer> {
/**
* 节点类:树中的每一个节点的类
*
* @param <E extends Integer>>
*/
class Node<E extends Integer> {
private E item; // 存放元素
private Node<E> left; // 存放左子树地址
private Node<E> right;//存放右子树的地址
public Node(E item, Node<E> left, Node<E> right) {
this.item = item;
this.left = left;
this.right = right;
}
public Node(E item) {
this.item = item;
}
/**
* 添加节点的方法
*/
public void addNode(Node node) {
// 完成新节点中的元素与当前节点的元素进行比较
if (node.item.intValue() < this.item.intValue()) {
if (this.left == null) {
this.left = node;
} else {
this.left.addNode(node);
}
} else {
if (this.right == null) {
this.right = node;
} else {
this.right.addNode(node); // 递归调用!很牛逼!
}
}
}
/**
* 使用中顺序遍历二叉树
*/
public void inorderTraversal() {
// 找到最左测的节点
if (this.left != null) this.left.inorderTraversal();
System.out.println(this.item);
if (this.right != null) this.right.inorderTraversal();
}
}
private Node<E> root; // 存放根节点的地址
/**
* 添加元素的方法
*
* @param element
*/
public void add(E element) {
// 实例化一个节点类
Node<E> node = new Node(element);
// 判断当前二叉树有没有跟节点!
if (this.root == null) {
this.root = node;
} else {
this.root.addNode(node);
}
}
/**
* 排序方法
*/
public void sort() {
// 判断跟节点是否存在
if (this.root != null) {
this.root.inorderTraversal(); // 遍历
}
}
public static void main(String[] args) {
BinaryTreeSort<Integer> s1 = new BinaryTreeSort<>();
s1.add(12);
s1.add(1);
s1.add(3);
s1.add(6);
s1.add(15);
s1.add(5);
s1.add(2);
s1.sort(); // 排序
}
}
|