Dart : N-ary 树实现

Dart : N-ary tree implementation

我有一个大学项目,我需要在 dart 中实现一个 N-ary 树。

到目前为止这是我的节点

class Node {

    Node parent; // parent of the current node
    List<Node> children; // children of the current node
    int id;
    String actualMessage;

    Node (int id, String actualMessage){
        this.id=id;
        this.actualMessage=actualMessage; 
        children  = new List<Node>();
    }
}

我对如何实现以下方法感到困惑。我会尝试用下面的例子来解释我需要什么

A为根,有3个children:B、C、D。B有2个children:E、F。E有1个child:G。

Check Tree example here

  1. 如何向树中添加根节点/parent节点/child节点=>如何添加A、B和E
  2. 如何从树中删除一个节点。 => 如何删除 B。它也应该删除它的 children。
  3. 如何检索 parent 的 "actualMessage" 以及当 parent 作为参数传递时所有可能的 children(在单个级别上)=> 如何得到关于 A 的实际消息?方法也应该 return B、C 和 D 上的实际消息
  4. 如何获取最长路径的节点数 => 最长路径的节点数是从根节点到最后一个节点的路径。在我的例子中是 4。
  5. 如何在到达根的任何节点上检索树的所有 parent 的节点数和列表。 => G 中的节点数是 4,G 中所有 parent 的列表是 E、B 和 A。

任何有关如何执行上述操作的代码或信息将不胜感激。这是我被困在同一件事上的第三天。

谢谢

哇,你要的太多了:P

我已经尝试了前 2 个要求,这里是可以帮助您满足它们的代码。

Node root = new Node(0, "A"); // Your root node

我将展示树上预购遍历的结果。

  1. 添加新节点:
void addNode(Node parent, Node newNode){
  newNode.parent = parent;
  parent.children.add(newNode);
}

运行之后:

Node b = new Node(1, "B");
addNode(root, b);

Node e = new Node(2, "E");
addNode(b, e);

预序遍历结果:

Visited Node A
Visiting child:
Visited Node B
Visiting child:
Visited Node E

这与你的结构一致:D

  1. 删除节点(及其子节点),我使用 'actualMessage' 作为比较。你可以根据你的实现使用你认为更好的任何东西:
void deleteNode(Node treeRoot, String message){
  Node n = treeRoot;
  if(message == n.actualMessage){
    print("Deleted Node " +n.actualMessage);
    n.parent.children.remove(n);
    return;
  }
  for(int i = 0; i < n.children.length; i++){
      deleteNode(n.children[i], message);
  }
}

运行之后:

deleteNode(root, "B");

预序遍历结果:

Deleted Node B
Visited Node A

同样,似乎工作正常:D

Ill update this as soon as I get more time