package org.wyh;
import java.util.ArrayList;
import java.util.List;
public class GetAllLeaf {
// 测试方法
public static void main(String[] args) {
// TODO Auto-generated method stub
GetAllLeaf getAllLeaf = new GetAllLeaf();
String a[] = new String[] { "0101", "010102", "010104", "010103",
"0102", "0103", "01010301", "abc" };
ArrayList<String> rs = new ArrayList<String>();
getAllLeaf.findLeaves("0101", a, rs);
for (String r : rs) {
System.out.println(r);
}
//输出结果010102 010104 01010301
}
/**
* 找出给定节点形数据的所有叶子
*
* @param gv
* 给定节点数据
*
* @param data
* 节点数据集合
*
* @param rs
* 存放结果 ;
*/
public void findLeaves(String gv, String data[], List<String> rs) {
for (int i = 0; i < data.length; i++) {
if (data[i].startsWith(gv)) {
// 如果是指定节点的孩子则递归查找
if (data[i].trim().length() > gv.trim().length()) {
findLeaves(data[i], data, rs);
} else {
// 把叶子节点放到结果集合中
if (this.existsChildren(gv, data) == false
&& rs.contains(gv) == false) {
rs.add(gv);
}
}
}
}
}
/**
* 给定数据是否含有子节点
*
* @param nodeValue
* 给定节点数据
*
* @param data
* 节点数据集合
*
* @param returns
* if hasChildren reurn true else return false;
*/
public boolean existsChildren(String nodeValue, String data[]) {
for (String everyNode : data) {
if (everyNode.startsWith(nodeValue)
&& everyNode.length() > nodeValue.length()) {
return true;
}
}
return false;
}
}
工作需要写了一个取得树形数据中指定节点所有叶子的算法[改进曾写的一个相同算法]...
最新推荐文章于 2024-07-12 10:45:15 发布