//定义二叉树,数据插入基本逻辑是,小、相同的放左边,大的放右边
class Node {
// 左子节点
public Node leftNode;
// 右子节点
public Node rightNode;
// 值
public Object value;
public void add(Object v)
{
if(value==null)
{
value=v;
}
else
{
if((Integer)v<=(Integer)value)
{
if(leftNode==null)
leftNode=new Node();
leftNode.add(v);
}
else
{
if(rightNode==null)
rightNode=new Node();
rightNode.add(v);
}
}
}
//中序遍历 达成的效果就是从小到大排
public List<Object> values()
{
List<Object> values = new ArrayList<>();
if(leftNode!=null)
values.addAll(leftNode.values());
values.add(value); //当前节点
if(rightNode!=null)
values.addAll(rightNode.values());
return values;
}
//先序遍历
public List<Object> xianxu()
{
List<Object> values=new ArrayList<>();
values.add(value);
if(leftNode!=null)
values.addAll(leftNode.xianxu());
if(rightNode!=null)
values.addAll(rightNode.xianxu());
return values;
}
//后序遍历
public List<Object> houxu()
{
List<Object> values=new ArrayList<>();
if(leftNode!=null)
values.addAll(leftNode.houxu());
if(rightNode!=null)
values.addAll(rightNode.houxu());
values.add(value);
return values;
}
//从大到小排,由中序遍历启发
public List<Object> Max_min()
{
List<Object> values=new ArrayList<>();
if(rightNode!=null)
values.addAll(rightNode.Max_min());
values.add(value);
if(leftNode!=null)
values.addAll(leftNode.Max_min());
return values;
}
}
public class Main {
public static void main(String[] args) {
//用二叉树进行排序
int[] data1 = new int[10];
for (int i = 0; i < 10; i++)
{
int randomNum = (int)(Math.random() * 100);
data1[i] = randomNum;
}
Node roots = new Node();
for (int number : data1) {
roots.add(number);
}
roots.values();//中序遍历可以得到从小到大排的数组
System.out.println(Arrays.toString(data1)); //排序前
System.out.println(roots.values()); //排序后
}
}