Заменяет дочерний узел по британскому летнему времени с внуком в Rust

#rust #binary-search-tree

#Ржавчина #двоичный поиск-дерево

Вопрос:

Я пытаюсь реализовать удаление узла. Когда узел не имеет детей, я просто изменять влево или вправо родителя. Когда узел имеет левого или правого поддерева, как я могу удалить узел и сохранить его поддерево?

Вот реализация узлов дерева :

 use std::rc::Rc;
use std::cell::RefCell;

// Definition for a binary tree node.
#[derive(Debug, PartialEq, Eq)]
pub struct TreeNode {
  pub val: i32,
  pub left: Option<Rc<RefCell<TreeNode>>>,
  pub right: Option<Rc<RefCell<TreeNode>>>,
}

impl TreeNode {
  #[inline]
  pub fn new(val: i32) -> Self {
    TreeNode {
      val,
      left: None,
      right: None
    }
  }
}
  

На выполнение дается и не может быть изменен.

Ответ №1:

Я понял это сам:

 let right_node = node.as_mut().unwrap().borrow_mut().right.take().unwrap(); // It may be the left child.
node.replace(right_node);