import java.util.ArrayList;
import java.util.List;
public class Main {
public class Node {
//左子节点.
private Node leftNode;
// 右子节点.
private Node rightNode;
// 当前节点值.
private Integer value = null;
public void add(Integer i) {
if (value == null) {
//如果value为null,说明本身节点是空。没有左右子节点。
value = i;
} else {
if (i < value) {
//i作为左子节点。
if (leftNode == null) {
leftNode = new Node();
}
leftNode.add(i);
} else {
//i作为右子节点。
if (rightNode == null) {
rightNode = new Node();
}
rightNode.add(i);
}
}
}
public Node getLeftNode() {
return leftNode;
}
public Node getRightNode() {
return rightNode;
}
public Integer getValue() {
return value;
}
// 中序遍历并存储所有的节点.
//升序。
public List<Integer> getValues() {
List<Integer> values = new ArrayList<>();
//记录左子节点
if (null != getLeftNode())
values.addAll(getLeftNode().getValues());
//记录中间(根)节点
values.add(getValue());
//记录右子节点
if (null != getRightNode())
values.addAll(getRightNode().getValues());
return values;
}
}
//中序遍历。
public static void traversal(Node node) {
if (node == null)
return;
traversal(node.getLeftNode());//访问左子.
//输出值,访问中间节点(根节点).
System.out.print(node.getValue() + ",");
traversal(node.getRightNode());//访问右子.
}
public static void main(String[] args) {
new Main().test();
}
private void test() {
//制造随机数据。
int data[] = new int[10];
for (int i = 0; i < data.length; i++) {
data[i] = (int) (Math.random() * 10);
System.out.print(data[i] + ",");
}
System.out.println();
Node nodes = new Node();
for (int i : data) {
nodes.add(i);
}
System.out.println("输出结果,最终二叉树排序后的结果:");
//traversal(nodes);
System.out.println(nodes.getValues());
}
}
输出:
1,7,0,7,6,2,9,5,5,3,
输出结果,最终二叉树排序后的结果:
[0, 1, 2, 3, 5, 5, 6, 7, 7, 9]