如何将平面数据结构显示为分层数据结构(Java)?

发布于 2021-01-29 19:44:09

我最近在求职的实际测试中面对这个问题。

假设您得到了一个像这样的平面数据结构:

**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应用程序来构建此概念。

关注者
0
被浏览
114
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    以下是一些示例代码,这些代码使用递归在层次结构中列出了它们。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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看