当前位置: 首页 > 知识库问答 >
问题:

在树上添加一个新结。有什么建议吗?

浦毅
2023-03-14

我试图编写一个树的方法,它将通过节点的名称将一个新节点插入到当前树中。我成功地将一个节点添加到节点的第一级,这指的是根链接,但是当我尝试添加一个与根链接不关联的新节点时,没有任何结果。我明白,插入()方法具有只适用于根链接的逻辑,但我如何修复它,以便其他链接添加新节点。抱歉,如果不完全清楚,英语不是我的母语。

public class Tree {

    public static void main(String[] args) {
        Node root = new Node("Root");

        Node level1 = new Node("Level-1");
        Node level2 = new Node("Level-2");
        Node level1a = new Node("Level-1a");
        Node level1b = new Node("Level-1b");
        Node level3 = new Node("Level-3");

        Node some = new Node("insert child");

        root.add(level1);
        root.add(level1a);
        root.add(level1b);
        level1.add(level2);
        level2.add(level3);

        System.out.println("The initial state:\n");

        root.print(0);

        root.insert(some, "Level-1");
        level2.insert(some, "Level-2");

        System.out.println("\nAfter inserting a branch:\n");
        root.print(0);

    }

    static class Node {

        private final String name;
        private final List<Node> children = new ArrayList<>();

        public Node(String name) {
            this.name = name;
        }

        public void add(Node child) {
            children.add(child);
        }

        public void print(int lv) {
            for (int i = 0; i < lv; i++) System.out.print(" ");

            System.out.println(this.name);

            for (Node a : this.children) {
                a.print(lv + 5);
            }
        }

        public void insert(Node newNode, String branchParentName) {
            for (Node element : children) {
                if (branchParentName.equals(element.name)) {
                    element.add(newNode);
                }
            }
        }

    }

}

这是我的算法

  1. 在第一级查找节点名,

我已经完成了第1点和第2点,如何从我的算法中得出第3点和第4点?我不知道如何更深入地了解节点中的级别。

共有1个答案

逄烨
2023-03-14

像这样的怎么样:

    public boolean insert(Node newNode, String branchParentName) {
        if (branchParentName.equals(name)) {
            add(newNode);
            return true;
        }
        for (Node element : children) {
            if (element.insert(newNode, branchParentName)) {
                return true;
            }
        }
        return false;
    }
 类似资料:
  • 我有一个很长的switch语句代码(大约8个案例),它决定了在浏览器中使用什么搜索来查找元素。有没有关于如何重构这段代码的建议? WebElement CurrentObject=null;切换(SearchBy){case“className”:尝试{CurrentObject=new WebDriverWait(driver,ConstantValues.LONGWAIT)。直到(Expect

  • 总的来说,问题是做什么?

  • 在Scapy中添加新的协议(或者是更加的高级:新的协议层)是非常容易的。所有的魔法都在字段中,如果你需要的字段已经有了,你就不必对这个协议太伤脑筋,几分钟就能搞定了。 简单的例子 每一个协议层都是Packet类的子类。协议层背后所有逻辑的操作都是被Packet类和继承的类所处理的。一个简单的协议层是被一系列的字段构成,他们关联在一起组成了协议层,解析时拆分成一个一个的字符串。这些字段都包含在名为f

  • 问题内容: 最近三年,我一直在用PHP进行Web应用程序开发。我现在快要尝试Java。我最近一次使用该语言是在8年前,而且大部分是学术性的。 我对PHP的对象模型(版本5)相当熟悉,并且我几乎完全是在OO中进行编码的。我现在想传达这种经验并将其用于Java开发。 我来自哪里: linux作为桌面和服务器 Vim / gVim +插件作为编辑器 MySQL的数据库 apache httpd 一堆PH

  • 问题内容: 我从未见过 在任何地方实际使用过HTML标记。使用它有陷阱吗,这意味着我应该避免使用它? 我从来没有注意到它在现代生产站点(或任何站点)上使用过的事实,使我对此感到不安,尽管它似乎具有简化我站点上链接的有用应用程序。 编辑 在使用基本标签几周后,我确实发现使用基本标签会引起一些重大麻烦,这使它比最初出现的效果要差得多。从本质上讲,变化和基本标签下是_非常_有它们的默认行为不兼容,并可以

  • 问题内容: 我正在做一个基于滚动2D地图/平铺的游戏。每个图块(存储为tile [21] [11]-每个地图总共231个图块)最多可以包含21个值(存储为int [3] [7])。在全屏模式下,我一次可以看到8张地图。 平均而言,每张地图的绘制时间约为0.03秒(可通过System.nanoTime找到)。问题在于,一旦在屏幕上显示多于一张地图,Swing事件轮询就会明显变慢。 有什么解决办法吗?