public class SplitorPath {
//记录所有从根节点到叶子结点的路径
private static List<String> pathList=new ArrayList<>();
public List<DataLoadFilterItem> split() {
//类目全路径
Stack <TreeNodeVO> pathstack=new Stack();
TreeNodeVO treeNodeVO = new TreeNodeVO();
TreeNodeVO treeNodeVO1 = new TreeNodeVO();
treeNodeVO1.setId("1");
List<treeNodeVO> childList = new ArrayList<>();
childList.add(treeNodeVO1)
treeNodeVO.setChildList(childList)
treeNodeVO.setId("2");
iteratorNode(treeNodeVO,pathstack);
for (String idPaths : pathList) {
System.out.println(idPaths);
}
}
/**
* 利用栈递归获取根节点到叶子节点全路径
* @param treeNodeVO
* @param pathstack
*/
private void iteratorNode(TreeNodeVO treeNodeVO, Stack<TreeNodeVO> pathstack) {
pathstack.push(treeNodeVO);//入栈
List childlist=treeNodeVO.getChildList();
if(childlist==null){ //没有叶子 说明是叶子节点
List lst=new ArrayList();
Iterator stackIt=pathstack.iterator();
while(stackIt.hasNext()) {
lst.add(stackIt.next());
}
//路径拼接
String idPath = jointPath(lst);
//保存路径信息
pathList.add(idPath);
return;
}else {
Iterator it=childlist.iterator();
while(it.hasNext()) {
TreeNodeVO child=(TreeNodeVO)it.next();
//深度优先 进入递归
iteratorNode(child,pathstack);
pathstack.pop();//回溯时候出栈
}
}
}
//拼接出路径
private String jointPath(List lst) {
StringBuilder idPath = new StringBuilder();
for (int i = 1; i < lst.size(); i++) {
TreeNodeVO n=(TreeNodeVO)lst.get(i);
idPath.append(n.getId()).append("-");
}
return idPath.toString();
}
}
获取树形结构根节点到叶子节点的全路径
于 2020-11-10 09:52:38 首次发布