我最近在求职的实际测试中面对这个问题。
假设您得到了一个像这样的平面数据结构:
**Category** **Name** **Parent**
1 electronics 0
2 Television 1
3 21inch 2
4 23inch 2
5 LCD display 2
6 player 1
7 mp3player 6
8 vcd player 6
9 dvd player 6
10 hd quality 8
现在,从上面的平面数据结构中,我们想要显示类似下面的分层树结构的内容。
-Electronics
| -Television
| | -21 inch
| | -23 inch
| | -lcd display
| -Player
| | -mp3player
| | -vcdplayer
| | | -HD display
| | -DVD player
然后,如果我要向我的数组添加另一个条目,例如:
11 Test 3
然后它应该Test
在下面显示条目21inch
。
所以对于我目前正在使用的这类东西ArrayList
,可以遍历到第二级,但是不能遍历第三级。那么执行此操作的最佳方法是什么?
谢谢
编辑:
我被要求仅使用基于DOS的Java应用程序来构建此概念。
以下是一些示例代码,这些代码使用递归在层次结构中列出了它们。Item类具有子级列表。诀窍是将任何新的孩子添加到正确的父母中。这是我为此创建的方法:
public Item getItemWithParent(int parentID){
Item result = null;
if(this.categoryID == parentID){
result = this;
} else {
for(Item nextChild : children){
result = nextChild.getItemWithParent(parentID);
if(result != null){
break;
}
}
}
return result;
}
可能有一种更有效的方法,但这可行。
然后,当您要将新项目添加到层次结构时,请执行以下操作:
public void addItem(int categoryID, String name, int parentID) {
Item parentItem = findParent(parentID);
parentItem.addChild(new Item(categoryID, name, parentID));
}
private Item findParent(int parentID) {
return rootNode.getItemWithParent(parentID);
}
对于实际的显示,我只是传递了一个“选项卡级别”,其中说出了选项卡输入的距离,然后为每个孩子增加它,如下所示:
public String toStringHierarchy(int tabLevel){
StringBuilder builder = new StringBuilder();
for(int i = 0; i < tabLevel; i++){
builder.append("\t");
}
builder.append("-" + name);
builder.append("\n");
for(Item nextChild : children){
builder.append(nextChild.toStringHierarchy(tabLevel + 1));
}
return builder.toString();
}
这给了我这个:
-electronics
-Television
-21inch
-Test
-23inch
-LCD display
-player
-mp3player
-vcd player
-hd quality
-dvd player
问题内容: 我的问题是我想按层次结构显示数据,如下所示: Democrat County Clerk Candidate 1 Candidate 2 Magistrate Candidate 1 Candidate 2 *Candidate 3 但是我正在像这样检索数据集: 我计划使用嵌套的中继器,但是我需要一个不同的Party值,然后才需要该聚会中不同的办公室名称值。 是否有.NET函数可以轻松
顺序结构 顺序栈(Sequence Stack) SqStack.cpp 顺序栈数据结构和图片 typedef struct { ElemType *elem; int top; int size; int increment; } SqStack; 队列(Sequence Queue) 队列数据结构 typedef struct { ElemType * elem; int fron
数据结构 Collection 和 Sequence Clojure 常用的数据结构有 List, Map, Vector, Set. 他们都属于 Collection, 之间的关系大致是这样: 属于 Clojure 当中实现的数据结构都是 Collection. 编码当中会遇到 Host 平台的数据类型, 不属于 Collection. 实现了 Collection 的接口的数据结构都支持这些函
1 红黑树 红黑树与AVL的比较: AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多; 红黑是用非严格的平衡来换取增删节点时候旋转次数的降低; 所以简单说,如果你的应用中,搜索的次数远远大于插入和删除,那么选择AVL,如果搜索,插入删除次数几乎差不多,应该选择RB。 红黑树详解: https://xieguanglei.github.io/blog/post/
数据结构(Data Structures)基本上人如其名——它们只是一种结构,能够将一些数据聚合在一起。换句话说,它们是用来存储一系列相关数据的集合。 Python 中有四种内置的数据结构——列表(List)、元组(Tuple)、字典(Dictionary)和集合(Set)。我们将了解如何使用它们,并利用它们将我们的编程之路变得更加简单。 列表 列表 是一种用于保存一系列有序项目的集合,也就是说,
数据结构 在理解框架之前,需要先了解一下调度器框架所需要的数据结构。 通常的操作系统中,进程池是很大的(虽然在 ucore 中,MAX_PROCESS 很小)。在 ucore 中,调度器引入 run-queue(简称rq,即运行队列)的概念,通过链表结构管理进程。 由于目前 ucore 设计运行在单CPU上,其内部只有一个全局的运行队列,用来管理系统内全部的进程。 运行队列通过链表的形式进行组织。