mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 16:54:50 +08:00
Merge pull request #1807 from fwqaaq/patch-11
Update 0450.删除二叉搜索树中的节点.md
This commit is contained in:
@ -680,6 +680,40 @@ object Solution {
|
||||
}
|
||||
```
|
||||
|
||||
## rust
|
||||
|
||||
```rust
|
||||
impl Solution {
|
||||
pub fn delete_node(
|
||||
root: Option<Rc<RefCell<TreeNode>>>,
|
||||
key: i32,
|
||||
) -> Option<Rc<RefCell<TreeNode>>> {
|
||||
root.as_ref()?;
|
||||
|
||||
let mut node = root.as_ref().unwrap().borrow_mut();
|
||||
match node.val.cmp(&key) {
|
||||
std::cmp::Ordering::Less => node.right = Self::delete_node(node.right.clone(), key),
|
||||
std::cmp::Ordering::Equal => match (node.left.clone(), node.right.clone()) {
|
||||
(None, None) => return None,
|
||||
(None, Some(r)) => return Some(r),
|
||||
(Some(l), None) => return Some(l),
|
||||
(Some(l), Some(r)) => {
|
||||
let mut cur = Some(r.clone());
|
||||
while let Some(n) = cur.clone().unwrap().borrow().left.clone() {
|
||||
cur = Some(n);
|
||||
}
|
||||
cur.unwrap().borrow_mut().left = Some(l);
|
||||
return Some(r);
|
||||
}
|
||||
},
|
||||
std::cmp::Ordering::Greater => node.left = Self::delete_node(node.left.clone(), key),
|
||||
}
|
||||
drop(node);
|
||||
root
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<p align="center">
|
||||
<a href="https://programmercarl.com/other/kstar.html" target="_blank">
|
||||
<img src="../pics/网站星球宣传海报.jpg" width="1000"/>
|
||||
|
Reference in New Issue
Block a user