工作需要写了一个取得树形数据中指定节点所有叶子的算法[改进曾写的一个相同算法]

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;
	}
}

你可能感兴趣的:(工作,算法)