题目:
设计一个Hero二叉树,HeroNode.
可以向这个英雄二叉树插入不同的Hero对象,并且按照Hero的血量倒排序。
随机生成10个Hero对象,每个Hero对象都有不同的血量值,插入这个HeroNode后,把排序结果打印出来。
代码如下:
public class HeroNode {
public HeroNode leftNode;
public HeroNode rightNode;
public Hero values;
public List<Hero> newData() {
List<Hero> data = new ArrayList<>();
for (int i = 0; i < 10; i++) {
data.add(new Hero("hero " + i, (int) (Math.random() * 1000)));
}
return data;
}
public void addData(Hero hero) {
if (null == values) {
values = hero;
}
else {
if (values.getPrice() <= hero.getPrice()) {
if (null == leftNode) {
leftNode = new HeroNode();
}
leftNode.addData(hero);
}
else {
if (null == rightNode) {
rightNode = new HeroNode();
}
rightNode.addData(hero);
}
}
}
public List<Hero> sortData() {
List<Hero> list = new ArrayList<>();
if (!(null == leftNode)) {
list.addAll(leftNode.sortData());
}
list.add(values);
if (!(null == rightNode)) {
list.addAll(rightNode.sortData());
}
return list;
}
public static void main(String[] args) {
HeroNode hn = new HeroNode();
List<Hero> heroes = hn.newData();
for (Hero h : heroes) {
hn.addData(h);
System.out.println(h);
}
System.out.println("---------------------------");
List<Hero> l = hn.sortData();
for (int i = 0; i < l.size(); i++) {
System.out.println(l.get(i));
}
}
}