飞镖:N元树实现



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

这是我到目前为止的节点

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 个子项:B、C 和 D.B 有 2 个子项:E和 F.E 有 1 个子项:G。

在此处检查树示例

  1. 如何将根/父节点/子节点添加到树中=>如何添加A,B和E
  2. 如何从树中删除节点。 => 如何删除 B。它也应该删除它的孩子。
  3. 当父级
  4. 作为参数传递时,如何检索父级和所有可能的子级的"实际消息"(在单个级别上(=> 如何在 A 上获取实际消息?方法也应该返回 B、C 和 D 上的实际消息
  5. 如何从最长路径中检索节点数 => 最长路径中的节点数是从根到最后一个节点的路径。在我的情况下是 4。
  6. 如何检索节点数和到达根的任何节点上树的所有父节点的列表。 =>来自 G 的节点数是 4,来自 G 的所有父节点的列表是 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. 删除节点(及其子节点(,我使用"实际消息"作为比较。您可以根据您的实现使用您认为更好的任何内容:
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

一旦我有更多的时间,我就会更新这个

相关内容

  • 没有找到相关文章

最新更新