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