树的遍历,深度广度未知,在线等 工作中遇到一个问题,需要用树的遍历来解决。不是二叉树,要深度优先(从最下面的叶子节点递归向上)求各位大神帮忙 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大学的数据结构都学过吧?用递归算法伪代码大致如下:public void 深度优先遍历函数 (Node node, CallBack fun) { Nodes ns = node.所有子节点; for (Node n : ns) { 深度优先遍历函数(n, fun); } fun(node);}注:CallBack 是遍历时需要对每个节点进行什么特殊计算或处理的回调接口函数。 弱弱问一句,那个node是根节点是吗?大学学过,不过没有好好应用。现在工作了,发现那个的重要性了 /*** @param PostCode* 根据父节点递归获取所有子节点岗位* @return 树的子结点集合*/@SuppressWarnings("unchecked")public List<JobType> getPostCodeChilds(String postCode) {List<JobType> ret = new ArrayList<JobType>(); // 返回所有节点List<JobType> retRecursive = null; List<JobType> children = getChildrenNodes(postCode); // 每次递归出的临时节点列表,都要加到ret中。。for(JobType job0 : children){String displayOrder = job0.getDisplyOrder(); // 判断是否是最后一层节点(相当于LZ的普通记录),如果是则终止该节点下的递归if(!CommUtil.isNull(displayOrder) && displayOrder.equals("po")){ret.add(job0);}else{ // 不是最后一个节点(相当于LZ普通记录),则继续递归下面的节点retRecursive = getPostCodeChilds(job0.getJobTypeCode()); // 判断ret是否为0if(ret.size() == 0){ret = retRecursive;}else{ // 将每次递归的加入retret.addAll(retRecursive);}}}return ret;}getChildrenNodes方法根据父节点查询下面子节点. 求教:一个字段输入值受到正则表达式约束,该在什么时候触发呢? mysql写入乱码问题,help~ 谈谈 Stucts 的优缺点 关于spring泛型的自动注入问题 java如何控制数据链路层? java程序 和 Visual C#.net程序可以互相调用吗? 求助!一个Tomcat下访问Servlet的问题 struts+js文件问题 Tomcat-4.0.6下面servlet放的位置 做Java,Jsp/Servlet,EJB编程,数据库要掌握到什么程度? 关于spring的依赖注入 谢谢了 logic:iterate 的嵌套循环
Nodes ns = node.所有子节点;
for (Node n : ns) {
深度优先遍历函数(n, fun);
}
fun(node);
}
注:CallBack 是遍历时需要对每个节点进行什么特殊计算或处理的回调接口函数。
/**
* @param PostCode
* 根据父节点递归获取所有子节点岗位
* @return 树的子结点集合
*/
@SuppressWarnings("unchecked")
public List<JobType> getPostCodeChilds(String postCode) {
List<JobType> ret = new ArrayList<JobType>(); // 返回所有节点
List<JobType> retRecursive = null;
List<JobType> children = getChildrenNodes(postCode); // 每次递归出的临时节点列表,都要加到ret中。。for(JobType job0 : children){
String displayOrder = job0.getDisplyOrder();
// 判断是否是最后一层节点(相当于LZ的普通记录),如果是则终止该节点下的递归
if(!CommUtil.isNull(displayOrder) && displayOrder.equals("po")){
ret.add(job0);
}else{
// 不是最后一个节点(相当于LZ普通记录),则继续递归下面的节点
retRecursive = getPostCodeChilds(job0.getJobTypeCode());
// 判断ret是否为0
if(ret.size() == 0){
ret = retRecursive;
}else{
// 将每次递归的加入ret
ret.addAll(retRecursive);
}
}
}
return ret;
}getChildrenNodes方法根据父节点查询下面子节点.