Recursion BST树的实现问题

Recursion BST树的实现问题,recursion,rust,binary-search-tree,borrow-checker,Recursion,Rust,Binary Search Tree,Borrow Checker,我刚开始读一本关于生锈的书,所以我还没有完全理解这些问题。我需要一个解决办法,而不是关于生锈理论的讲座。导致编译器错误的行位于39和41处。第一个问题似乎是我在&mutself上使用了递归实例方法 error[E0499]:不能一次多次借用“*self”作为可变项 -->src/main.rs:38:30 | 32 |让mut node=&mut self.nodes[索引为usize]; |------------第一个可变借用发生在此处 ... 38 | node.leftindex=sel

我刚开始读一本关于生锈的书,所以我还没有完全理解这些问题。我需要一个解决办法,而不是关于生锈理论的讲座。导致编译器错误的行位于39和41处。第一个问题似乎是我在
&mutself
上使用了递归实例方法

error[E0499]:不能一次多次借用“*self”作为可变项
-->src/main.rs:38:30
|
32 |让mut node=&mut self.nodes[索引为usize];
|------------第一个可变借用发生在此处
...
38 | node.leftindex=self.insertrec(node.leftindex,num);
|^^^^----先借后用
|                              |
|第二个可变借用发生在这里
错误[E0502]:无法将“*self”作为不可变项借用,因为它也是作为可变项借用的
-->src/main.rs:40:30
|
32 |让mut node=&mut self.nodes[索引为usize];
|------可变借用发生在此处
...
40 | node.leftcount=self.count(node.leftindex);
|^^^^---------此处稍后使用可变借用
|                              |
|不可变借用发生在这里
完整代码如下:

结构树{ 节点:Vec, 根:i32, } 结构节点{ num:i32, leftindex:i32, rightindex:i32, leftcount:i32, rightcount:i32, } 常量NULL:i32=-1; impl-bst树{ fn新(容量:i32)->BSTREE{ 返回树{ 节点:Vec:::具有_容量(容量为usize), root:NULL, }; } fn插入(&mut self,num:i32){ self.root=self.insertrec(self.root,num); } fn insertrec(&mut self,index:i32,num:i32)->i32{ 如果索引==NULL{ 返回自分配(num); } 让mut node=&mut self.nodes[索引为usize]; 如果num==node.num{ 收益指数; } 如果numi32{ 断言!(索引!=NULL); 让node=&self.nodes[索引为usize]; 返回node.leftcount+node.rightcount+1; } fn分配(&mut self,num:i32)->i32{ self.nodes.push(BstNode{ num:num, leftindex:NULL, rightindex:NULL, 左计数:0, rightcount:0, }); 让index=self.nodes.len()-1; 返回索引为i32; } } fn main(){ 让mut bst=bstree::new(10000); bst.insert(5); bst.insert(8); bst.insert(11); bst.insert(10); bst.insert(9); bst.insert(4); bst.insert(3); }
您的问题似乎可以通过的答案来回答。如果没有,请回答您的问题以解释差异。否则,我们可以将此问题标记为已回答;作为副本进行表决