我有一个大学项目,我需要在 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。
在此处检查树示例
- 如何将根/父节点/子节点添加到树中=>如何添加A,B和E
- 如何从树中删除节点。 => 如何删除 B。它也应该删除它的孩子。 当父级
- 作为参数传递时,如何检索父级和所有可能的子级的"实际消息"(在单个级别上(=> 如何在 A 上获取实际消息?方法也应该返回 B、C 和 D 上的实际消息
- 如何从最长路径中检索节点数 => 最长路径中的节点数是从根到最后一个节点的路径。在我的情况下是 4。
- 如何检索节点数和到达根的任何节点上树的所有父节点的列表。 =>来自 G 的节点数是 4,来自 G 的所有父节点的列表是 E、B 和 A。
有关如何执行上述操作的任何代码或信息将不胜感激。这是我被困在同样事情上的第三天。
谢谢
哇,你要求:P
我已经尝试了前 2 个要求,以下是可以帮助您满足这些要求的代码。
Node root = new Node(0, "A"); // Your root node
我将在树上显示预购遍历的结果。
- 添加新节点:
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
- 删除节点(及其子节点(,我使用"实际消息"作为比较。您可以根据您的实现使用您认为更好的任何内容:
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
一旦我有更多的时间,我就会更新这个