メニューツリーのソート問題に関する解決策(一)
3782 ワード
最近はメニュー管理の展示をしていますが、ツリーリストは父親が子の前にいて、子が父に続いて正確に展示しなければならないことが分かりました.資料を調べた後、二つの解決案が見つかりました.一つは再帰的に並べ替えられたものです.もう一つは多叉樹を使って巡回します.多叉樹を使って巡回する案は「メニューツリーの並べ替え問題に関する解決案(二)」を参照してください..私はこの二つの案を簡単にカプセル化しました.本文は予備として忘れました.
再帰的にメニューツリーを並べ替えるツリーノードのインターフェース 再帰的並べ替え 具体的なノードのエンティティ は を使用します.
再帰的にメニューツリーを並べ替える
public interface TreeNode{
S getId();
S getPId();
/**
*
*/
boolean isRootNode();
}
/**
* list
* T
* K id pId
*/
public class TreeListSort {
List nodes;
List resultList;
/**
* list
*/
public List getSortTreeList(List nodeList){
nodes=nodeList;
resultList=new ArrayList<>();
for (T node:nodes){
if (node.isRootNode()){
resultList.add(node);
if (hasChild((K) node.getId())){
traverseChildren((K) node.getId());
}
}
}
return resultList;
}
/**
*
*/
public void traverseChildren(K id){
for (T node:nodes){
if (node.getPId()!=null&&node.getPId().equals(id)){
resultList.add(node);
if (hasChild((K) node.getId())){
traverseChildren((K) node.getId());
}
}
}
}
/**
*
*/
public boolean hasChild(K id){
for (T node:nodes){
if (node.getPId()!=null&&node.getPId().equals(id)){
return true;
}
}
return false;
}
}
/**
* id、 id
*/
public class TestNode implements TreeNode {
private int nodeId;
private String nodeName;
private int nodePId;
@Override
public Integer getId() {
return nodeId;
}
@Override
public Integer getPId() {
return nodePId;
}
@Override
public boolean isRootNode() {
return nodePId == 0;
}
public TestNode() {
}
public TestNode(int nodeId, String nodeName, int nodePId) {
this.nodeId = nodeId;
this.nodeName = nodeName;
this.nodePId = nodePId;
}
}
public class Main {
public static void main(String []args){
List testNodes=new ArrayList<>();
testNodes.add(new TestNode(1,"1",0));
testNodes.add(new TestNode(2,"2",0));
testNodes.add(new TestNode(3,"3",0));
testNodes.add(new TestNode(4,"1-4",1));
testNodes.add(new TestNode(5,"2-5",2));
testNodes.add(new TestNode(6,"3-6",3));
testNodes.add(new TestNode(7,"1-4-7",4));
testNodes.add(new TestNode(8,"1-4-8",4));
testNodes.add(new TestNode(9,"2-5-9",5));
testNodes.add(new TestNode(10,"2-5-9-10",9));
testNodes.add(new TestNode(11,"2-5-9-10-11",10));
testNodes.add(new TestNode(12,"2-5-9-10-11-12",11));
testNodes.add(new TestNode(13,"2-5-9-10-11-12-13",12));
testNodes.add(new TestNode(14,"2-5-9-10-11-12-13-14",13));
testNodes.add(new TestNode(15,"2-5-9-10-11-12-13-14-15",14));
//
TreeListSort treeSort=new TreeListSort<>();
List list=treeSort.getSortTreeList(testNodes);
for (TestNode node:list){
System.out.println(node.toString());
}
}
}
マルチツリーを使用して巡回します.「メニューツリーの並べ替え問題に関する解決策(二)」に間違いがあったり、足りなかったら教えてください.ありがとうございます.