Javaツリーデータの面接問題
8292 ワード
普段開発、学習、面接では、ツリー構造データの場所に遭遇することがよくあります.たとえば、一般的なツリー構造のメニューです.
ブロガーは最近、データ構造の面接に出会った.
タイトルは以下の通りです.
典型的な無限レベルのツリー構造です
1.解題の考え方
私の考えは
最初のステップですべてのデータを取得
2番目のステップでは、親ノードが0のデータ(親データ)を巡回します.
第3のステップでは、親データを巡回してサブレイヤデータを取得します.
ステップ4親データの印刷
ステップ5サブレイヤデータの印刷
結果は次のとおりです.
あまり話さないで、以下はコードです.
1.Emp
2.EmpTree.java
3.EmpDAO.java
4.TreeUtils.java
多くのコメントを歓迎して、多くの伝言を残して、足りない地方はまた业界の达人に指导してもらって、お礼を言います!!!
ブロガーは最近、データ構造の面接に出会った.
タイトルは以下の通りです.
典型的な無限レベルのツリー構造です
1.解題の考え方
私の考えは
最初のステップですべてのデータを取得
2番目のステップでは、親ノードが0のデータ(親データ)を巡回します.
第3のステップでは、親データを巡回してサブレイヤデータを取得します.
ステップ4親データの印刷
ステップ5サブレイヤデータの印刷
結果は次のとおりです.
あまり話さないで、以下はコードです.
1.Emp
package pojo;
/**
* @ : tjx
* @ :
* @ : 11:30 2018/9/5
**/
public class Emp {
private Integer ID;
private Integer Parent_ID;
private String Name;
public Integer getID() {
return ID;
}
public void setID(Integer ID) {
this.ID = ID;
}
public Integer getParent_ID() {
return Parent_ID;
}
public void setParent_ID(Integer parent_ID) {
Parent_ID = parent_ID;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
}
2.EmpTree.java
package pojo;
import java.util.List;
/**
* @ : tjx
* @ :
* @ : 11:34 2018/9/5
**/
public class EmpTree extends Emp{
private List childrens;
public List getChildrens() {
return childrens;
}
public void setChildrens(List childrens) {
this.childrens = childrens;
}
}
3.EmpDAO.java
package dao;
import pojo.EmpTree;
import java.util.ArrayList;
import java.util.List;
/**
* @ : tjx
* @ : dao
* @ : 11:38 2018/9/5
**/
public class EmpDAO {
public List selectAll(){
List list = new ArrayList();
EmpTree emp = new EmpTree();
emp.setID(1);
emp.setParent_ID(0);
emp.setName("CEO");
EmpTree emp2 = new EmpTree();
emp2.setID(2);
emp2.setParent_ID(1);
emp2.setName("CTO");
EmpTree emp3 = new EmpTree();
emp3.setID(3);
emp3.setParent_ID(2);
emp3.setName("Eng1");
EmpTree emp4 = new EmpTree();
emp4.setID(4);
emp4.setParent_ID(5);
emp4.setName("Finance1");
EmpTree emp5 = new EmpTree();
emp5.setID(5);
emp5.setParent_ID(1);
emp5.setName("CFO");
EmpTree emp6 = new EmpTree();
emp6.setID(6);
emp6.setParent_ID(5);
emp6.setName("Finance2");
EmpTree emp7 = new EmpTree();
emp7.setID(7);
emp7.setParent_ID(2);
emp7.setName("Eng2");
EmpTree emp8 = new EmpTree();
emp8.setID(8);
emp8.setParent_ID(1);
emp8.setName("Assistant1");
EmpTree emp9 = new EmpTree();
emp9.setID(9);
emp9.setParent_ID(3);
emp9.setName("DevSupport1");
EmpTree emp10 = new EmpTree();
emp10.setID(10);
emp10.setParent_ID(8);
emp10.setName("Intern1");
list.add(emp);
list.add(emp2);
list.add(emp3);
list.add(emp4);
list.add(emp5);
list.add(emp6);
list.add(emp7);
list.add(emp8);
list.add(emp9);
list.add(emp10);
return list;
}
}
4.TreeUtils.java
package utils;
import dao.EmpDAO;
import pojo.EmpTree;
import java.util.ArrayList;
import java.util.List;
/**
* @ : tjx
* @ :
* @ : 11:45 2018/9/5
**/
public class TreeUtils {
/**
* @param data
* @param pid
* @return
*/
public static List getParentTree(List data,int pid){
if (data == null) {
return null;
}
List empTreeList = new ArrayList();
data.forEach(empTree -> {
if(pid == empTree.getParent_ID()){
empTreeList.add(empTree);
}
});
return empTreeList;
}
/**
* PID
* @param data
* @param pid
* @return
*/
public static int getSizeByPid(List data,int pid){
return (int) data.stream().filter(empTree -> empTree.getParent_ID() == pid).count();
}
/**
*
* @param data
* @param parent
* @return
*/
public static List getChildrens(List data,EmpTree parent){
List result = new ArrayList();
//
data.forEach(empTree -> {
if(empTree.getParent_ID() == parent.getID()){
result.add(empTree);
}
});
//
result.forEach(empTree -> {
int count = getSizeByPid(data, parent.getID());
if(count>0){
//
empTree.setChildrens(getChildrens(data,empTree));
}
});
return result;
}
/**
*
* @param data
*/
public static void printChildrens(List data,String oldStr){
if(oldStr == null){
oldStr = "-->";
}
String finalOldStr = oldStr;
data.forEach(empTree -> {
System.out.println(finalOldStr +empTree.getName() );
if(empTree.getChildrens()!=null){
printChildrens(empTree.getChildrens(),finalOldStr+"-->");
}
});
}
/**
*
* @param data
*/
public static void print(List data){
data.forEach(empTree -> {
System.out.println(empTree.getName());
if(empTree.getChildrens()!=null){
printChildrens(empTree.getChildrens(),null);
}
});
}
public static void main(String[] args) {
EmpDAO empDAO = new EmpDAO();
// DB
List rootData = empDAO.selectAll();
//
List parentTree = getParentTree(rootData, 0);
//
parentTree.forEach(empTree -> {
empTree.setChildrens(getChildrens(rootData,empTree));
});
print(parentTree);
}
}
多くのコメントを歓迎して、多くの伝言を残して、足りない地方はまた业界の达人に指导してもらって、お礼を言います!!!