我只需要给定节点数就可以生成随机二叉树。我想使用带有类的链接树结构来实现。可能吗?还是有另一种方法?我找不到任何资源。我想类似Java的示例也可以工作。
答案 0 :(得分:1)
您可以通过许多不同的方式来执行此操作。这是一种可能的方式。它先创建节点,然后通过遍历每个节点并通过具有开放点的节点为它提供一个随机的父节点来连接它们。
import 'dart:math';
const maxNodes = 10;
void main() {
final rng = Random();
final nodes = List.generate(maxNodes, (index) => Node(index + 1));
final openNodes = [nodes[0]];
nodes.skip(1).forEach((node) {
node.parent = openNodes[rng.nextInt(openNodes.length)];
openNodes.add(node);
if (node.parent.right != null ||
(node.parent.left == null && rng.nextBool())) {
node.parent.left = node;
} else
node.parent.right = node;
if (node.parent.left != null && node.parent.right != null)
openNodes.remove(node.parent);
});
nodes.forEach(print);
}
class Node {
Node(this.id);
final int id;
Node parent;
Node left;
Node right;
@override
String toString() => '$id: (${left?.id ?? '_'}, ${right?.id ?? '_'})';
}
在DartPad上进行测试。