多叉树遍历
针对数据库仅由PID存储父子结构的情况
递归遍历
数据库全量取出数据
根据pid找出第一批节点
递归组装剩下节点
遍历根节点,找到根节点的下一层节点
深度优先遍历
public List<Node> compositeChildren(Integer pid,List<Node> allNodes){
List<Node> children = new ArrayList<>();
// 找到下一层的子节点
allNodes.forEach(e->{
if(e.getPid.equals(pid)){
children.add(e);
}
});
// 子节点组装
children.forEach(e->{
e.setChildren(compositeChildren(e.getId,allNodes));
});
// 递归退出点
if(chilren.isEmpty()){
return null;
}
return children;
}
stack遍历
广度优先遍历
public void compositeChildren(Node root){
LinkedList<Node> stack = new LinkedList<>();
stack.push(root);
while(!stack.isEmpty()){
Node nowNode = stack.pop();
// 找到子节点入栈
List<Node> children = getNextLevel(nowNode.getId());
children.forEach(e->{
stack.push(e);
});
nowNode.setChildren(children);
}
}