(root: Option<NonNull<Node<K, V>>>, key: K, val: V)
| 139 | } |
| 140 | |
| 141 | fn insert<K, V>(root: Option<NonNull<Node<K, V>>>, key: K, val: V) -> Option<NonNull<Node<K, V>>> |
| 142 | where |
| 143 | K: Ord, |
| 144 | { |
| 145 | // 插入过程与bst是一样的 |
| 146 | if let Ok(x) = unsafe { bst::insert(root, key, val) } { |
| 147 | let root = if root.is_none() { Some(x) } else { root }; |
| 148 | // 修正,使树恢复平衡 |
| 149 | insert_fix(root, Some(x)) |
| 150 | } else { |
| 151 | None |
| 152 | } |
| 153 | } |
| 154 | |
| 155 | fn insert_fix<K, V>( |
| 156 | root: Option<NonNull<Node<K, V>>>, |