一般树形结构_求通路长度

来源:互联网 发布:复合材料刚度矩阵 编辑:程序博客网 时间:2024/05/21 19:30
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,则他的父节点就是parentfor(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;}// 清空临时数组tpublic 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, "河北", "江苏");}}

0 0