MCPcopy Create free account
hub / github.com/QMHTMY/RustBook / insert

Method insert

code/chapter07/bst.rs:86–123  ·  view source on GitHub ↗
(&mut self, key: T, val: U)

Source from the content-addressed store, hash-verified

84 }
85
86 fn insert(&mut self, key: T, val: U) {
87 // 没数据直接插入
88 if self.key.is_none() {
89 self.key = Some(key);
90 self.val = Some(val);
91 } else {
92 match &self.key {
93 Some(k) => {
94 // 存在 key,更新 val
95 if key == *k {
96 self.val = Some(val);
97 return;
98 }
99
100 // 未找到相同 key,需要插入新节点
101 // 先找到需要插入的子树
102 let child = if key < *k {
103 &mut self.left
104 } else {
105 &mut self.right
106 };
107
108 // 根据节点递归下去,直到插入
109 match child {
110 Some(ref mut node) => {
111 node.insert(key, val);
112 },
113 None => {
114 let mut node = BST::new();
115 node.insert(key, val);
116 *child = Some(Box::new(node));
117 },
118 }
119 },
120 None => (),
121 }
122 }
123 }
124
125 fn search(&self, key: &T) -> bool {
126 match &self.key {

Callers 2

bucket_sortFunction · 0.45
mainFunction · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected