树形构建面试题

简介: 树形构建面试题

形构建

题目:

转换树形,将IEntityTable的树形,经InputEntityValidList进行过滤,并重新构建树形:

1、如果父节点不在过滤列表内,则向上判断,直到上级节点存在时,挂到该节点下。或找不到上级节点,挂到根节点下。

2、根据传参curEntityKey,将该节点的isSelected置为true

3、根据传参InputEntityValidList,将节点的isChecked置为true

4、根据新树形,设置节点的ITree<>的isLeaf属性

比如:

【原始EntityQuery树形】:

A

A1

A11

A111

A12

A2

A21

A22

B

B1

B11

InputEntityValidList:A,A111, A12,B11

curEntityKey:A

则新树形为:

A(isChecked:true, isSelected:true, isLeaf:false)

A111(isChecked:true, isSelected:false, isLeaf:true)

A12(isChecked:true, isSelected:false, isLeaf:true)

B11(isChecked:true, isSelected:false, isLeaf:false)

输入参数

IEntityTable entityTable, List inputEntityValidList, String curEntityKey

输出:

List<ITree>

节点转换示例:

ITree target = new ITree(LightNodeData.buildEntityData(row));

target.setLeaf(true);

target.setSelected(true);

target.setChecked(true);

import java.util.ArrayList;

import java.util.List;


public class TreeNode {

private LightNodeData data;

private boolean isLeaf;

private boolean isChecked;


public TreeNode(LightNodeData data) {  
    this.data = data;  
    this.isLeaf = false;  
    this.isChecked = false;  
}  
public LightNodeData getData() {  
    return data;  
}  
public void setData(LightNodeData data) {  
    this.data = data;  
}  
public boolean isLeaf() {  
    return isLeaf;  
}  
public void setLeaf(boolean isLeaf) {  
    this.isLeaf = isLeaf;  
}  
public boolean isChecked() {  
    return isChecked;  
}  
public void setChecked(boolean isChecked) {  
    this.isChecked = isChecked;  
}  
@Override  
public String toString() {  
    return data.toString();  
}  

}

public class TreeNodeData {

private LightNodeData data;

public TreeNodeData(LightNodeData data) {  
    this.data = data;  
}  
public LightNodeData getData() {  
    return data;  
}  
public void setData(LightNodeData data) {  
    this.data = data;  
}  


}


public class TreeNodeTree {

private TreeNode 然后,我们定义了一个TreeNodeData类来表示树形节点的数据,包含节点的数据。接着,我们定义了一个TreeNodeTree类来表示树形树,包含根节点和一个buildTree方法来构建树形。在buildTree方法中,我们首先判断数据列表是否为空,如果不为空,则取出第一个数据作为根节点,然后遍历数据列表中的所有数据,对于每个数据,构建一个新的节点,并根据节点的选中状态设置节点的数据。最后,我们将根节点的数据设置为新构建的节点的数据。


需要注意的是,在实际应用中,我们需要根据具体的业务需求来构建树形,并根据需要设置节点的数据和状态。同时,我们还需要考虑树形的复杂度和性能等问题,是否为叶子节点以及是否为选中状态。我们还定义了一个TreeNodeData类来表示树形节点的数据,包含节点的数据以及是否为叶子节点和是否为选中状态。


接下来,我们定义了一个TreeNodeTree类来表示整个树形结构,包含根节点。在构造函数中,我们从数据列表中获取第一个数据,并创建一个新的节点对象。然后,我们遍历数据列表中的所有数据,对于每个数据,创建一个新的节点对象,并根据节点是否为叶子节点和是否为选中状态来设置节点的数据和状态。最后,我们将根节点的数据设置为新创建的节点对象的数据。


最后,我们可以使用以下代码来测试树形构建的功能:

public static void main(String[] args) {

TreeNodeData data1 = new TreeNodeData(new LightNodeData(“A”));

TreeNodeData data2 = new TreeNodeData(new LightNodeData(“A1”));

TreeNodeData data3 = new TreeNodeData(new LightNodeData(“A11”));

TreeNodeData data4 = new TreeNodeData(new LightNodeData(“A12”));

TreeNodeData data5 = new TreeNodeData(new LightNodeData(“B1”));

TreeNodeData data6 = new TreeNodeData(new LightNodeData(“B11”));

TreeNodeTree tree = new TreeNodeTree(tree);  
tree.buildTree(dataList);  

}

public static void main(String[] args) {

TreeNodeData data1 = new TreeNodeData(new LightNodeData(“A”));

TreeNodeData data2 = new TreeNodeData(new LightNodeData(“A1”));

TreeNodeData data3 = new TreeNodeData(new LightNodeData(“A11”));

TreeNodeData data4 = new TreeNodeData(new LightNodeData(“A12”));

TreeNodeData data5 = new TreeNodeData(new LightNodeData(“B1”));

TreeNodeData data6 = new TreeNodeData(new LightNodeData(“B11”));

TreeNodeTree tree = new TreeNodeTree(tree);  
tree.buildTree(dataList);  


}


相关文章
|
机器学习/深度学习 存储 算法
机器学习面试笔试知识点-决策树、随机森林、梯度提升决策树(GBDT)、XGBoost、LightGBM、CatBoost
机器学习面试笔试知识点-决策树、随机森林、梯度提升决策树(GBDT)、XGBoost、LightGBM、CatBoost
547 0
|
4月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】 GBDT面试题:其中基分类器CART回归树,节点的分裂标准是什么?与RF的区别?与XGB的区别?
文章讨论了梯度提升决策树(GBDT)中的基分类器CART回归树的节点分裂标准,并比较了GBDT与随机森林(RF)和XGBoost(XGB)的区别,包括集成学习方式、偏差-方差权衡、样本使用、并行性、最终结果融合、数据敏感性以及泛化能力等方面的不同。
55 1
|
7月前
|
设计模式 缓存 Java
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
补齐Android技能树——从AGP构建过程到APK打包过程,安卓rxjava面试
|
7月前
【一刷《剑指Offer》】面试题 18:树的子结构
【一刷《剑指Offer》】面试题 18:树的子结构
|
7月前
|
存储
Tire树-不学面试后悔
Tire树-不学面试后悔
面试还在被红-黑树虐?看完这篇轻松搞定面试官(二)
面试还在被红-黑树虐?看完这篇轻松搞定面试官
面试还在被红-黑树虐?看完这篇轻松搞定面试官(二)
|
7月前
|
存储 算法 关系型数据库
【面试普通人VS高手系列】b树和b+树的理解
【面试普通人VS高手系列】b树和b+树的理解
|
7月前
|
人工智能 算法
【数据结构入门精讲 | 第十三篇】考研408、公司面试树专项练习(二)
【数据结构入门精讲 | 第十三篇】考研408、公司面试树专项练习(二)
90 0
|
7月前
|
机器学习/深度学习 存储 算法
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
【数据结构入门精讲 | 第十二篇】考研408、公司面试树专项练习(一)
359 0
|
7月前
|
JavaScript 算法 前端开发
面试题:vue2和vue3区别、vue3项目的打包体积为什么减少40%、vue2和vue3同样可以使用TS开发,为什么vue3就易于扩展呢?vue3的摇树优化是怎么样的优化过程?
面试题:vue2和vue3区别、vue3项目的打包体积为什么减少40%、vue2和vue3同样可以使用TS开发,为什么vue3就易于扩展呢?vue3的摇树优化是怎么样的优化过程?
199 0