我目前正在尝试实现一个递归函数,从一个数字列表构建一个树 . 我目前有这个:
Node makelist(Integer[] nums) {
if (nums.length == 1) {
return Node(nums[0]);
} else {
Integer half = nums.length/2;
return Node(makelist(nums[0..half]), makelist(nums[half..$]));
}
}
这对我来说很好,而 Node
是一个对象 . 但是,我想 Node
是一个结构 . 结果,我为 Node
编写了以下代码:
struct Node {
Node* left, right, parent;
Integer val;
this(Integer val) {
this.val = val;
}
this(Node* left, Node* right) {
this.left = left;
this.right = right;
val = min(left.val, right.val);
left.parent = &this;
right.parent = &this;
}
}
现在,编译器显然不太喜欢这个 . 但是,我不知道如何获取 makelist
返回的地址,以使构造函数的参数成为指针 . 基本上,我想要传递 ref Node
s作为 left
和 right
(但编译器也在这里婊子)或指针(但我似乎无法使这些工作) .
我是低级代码的新手,并希望得到一些帮助,让它工作 . 基本上,我想使用上面描述的递归 makelist
,并且有 Node
的两个构造函数 . 我怎么能这样做并保持 Node
结构?
2 回答
我不确定你到底想要什么,但是这个怎么样:
另一种方法是使用 alias this