i
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import cn.itcast.tree.MyTree.Node;
class MyTree{
private List<Node> lst = new ArrayList<Node>();
class Node{
String data;
String parent;
}
public void add(String parent,String child){
//增加,当前节点的数据作为孩子节点
Node t = new Node();
t.data = child;
t.parent = parent;
lst.add(t);
}
//这里t对于取得的父节点列表,下面会调用的
List<String> t = new ArrayList<String>();
public String getParent(String x){
//从树的根节点开始遍历,若他的当前节点的数据等于x,则他的父节点就是parent
for(int i = 0;i<lst.size();i++ ){
if(lst.get(i).data.equals(x)) {
x = lst.get(i).parent;
t.add(lst.get(i).parent);
return getParent(x);
}
}
return null;
}
// 清空临时数组t
public void clearT() {
t.clear();
}
//取得两点之间的距离
public void lengthBetween(MyTree tree,String begin,String end){
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
tree.getParent(begin);
for (int i = 0; i < tree.t.size(); i++) {
a.add(tree.t.get(i));
}
tree.clearT();// 清空列表
tree.getParent(end);
for (int i = 0; i < tree.t.size(); i++) {
b.add(tree.t.get(i));
}
List<Integer> temp = new ArrayList<Integer>();
for (int i = 0; i < a.size(); i++) {
for (int j = 0; j < b.size(); j++) {
if (a.get(i).equals(b.get(j))) {
temp.add(i + j + 2);// 如果有多条路径,放入temp中
}
}
}
int dis = temp.get(0);// temp数组中最小的是第0位
System.out.println(begin+"和"+end+"节点距离为:" + dis);
tree.clearT();
}
}
public class Tree {
public static void main(String[] args) {
//计算任意两点的距离
MyTree tree = new MyTree();
tree.add("世界","亚洲");
tree.add("世界","欧洲");
tree.add("世界","美洲");
tree.add("亚洲","中国");
tree.add("亚洲","日本");
tree.add("亚洲","韩国");
tree.add("中国","北京");
tree.add("中国","河北");
tree.add("中国","江苏");
tree.lengthBetween(tree, "河北", "欧洲");
tree.lengthBetween(tree, "河北", "江苏");
}
}