根据上面的学习和理解,设计一个Hero二叉树,HeroNode.
可以向这个英雄二叉树插入不同的Hero对象,并且按照Hero的血量倒排序。
随机生成10个Hero对象,每个Hero对象都有不同的血量值,插入这个HeroNode后,把排序结果打印出来。
package com.java.demo.exceptionPtactice;
import java.util.ArrayList;
import java.util.List;
public class Node2 {
public Node2 leftNode;
public Node2 rightNode;
public Hero value;
public void add(Hero hero) {
if (null == value) {
value = hero;
} else {
if ((int) hero.hp - (int) value.hp <= 0) {
if (null == leftNode) {
leftNode = new Node2();
leftNode.add(hero);
}
} else {
if (null == rightNode) {
rightNode = new Node2();
rightNode.add(hero);
}
}
}
}
public List<Object> values() {
List<Object> values = new ArrayList<>();
//左节点遍历
if (null != leftNode) {
values.addAll(leftNode.values());
}
//添加当前节点
values.add(value);
//添加右节点
if (null != rightNode) {
values.addAll(rightNode.values());
}
return values;
}
public static void main(String[] args) {
ArrayList<Hero> heroes = new ArrayList<>();
for (int i = 0; i < 10; i++) {
heroes.add(new Hero("英雄" + i, (float) (Math.random() * 1000)));
System.out.println(heroes.get(i));
}
System.out.println("——————————————二叉树添加元素——————————————");
Node2 roots = new Node2();
for (Hero hero : heroes) {
roots.add(hero);
}
System.out.println("————————遍历二叉树————————————");
System.out.println(roots.values());
}
}