Skip to content

Commit cca409f

Browse files
committed
finish algorithm4
1 parent 0edcf10 commit cca409f

File tree

1 file changed

+62
-1
lines changed

1 file changed

+62
-1
lines changed

exercises/algorithm/algorithm4.rs

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,23 @@ where
5151
// Insert a value into the BST
5252
fn insert(&mut self, value: T) {
5353
//TODO
54+
match &mut self.root {
55+
None => {
56+
self.root = Some(Box::new(TreeNode::new(value)));
57+
}
58+
Some(node) => {
59+
node.insert(value);
60+
}
61+
}
5462
}
5563

5664
// Search for a value in the BST
5765
fn search(&self, value: T) -> bool {
5866
//TODO
59-
true
67+
match &self.root {
68+
None => false, // 空树
69+
Some(node) => node.search(&value),
70+
}
6071
}
6172
}
6273

@@ -67,6 +78,56 @@ where
6778
// Insert a node into the tree
6879
fn insert(&mut self, value: T) {
6980
//TODO
81+
match value.cmp(&self.value) {
82+
Ordering::Less => {
83+
// 插入值小于当前节点值,应该放到左子树
84+
match &mut self.left {
85+
None => {
86+
// 创建新节点并存入值
87+
self.left = Some(Box::new(TreeNode::new(value)));
88+
}
89+
Some(left_node) => {
90+
// 递归插入
91+
left_node.insert(value);
92+
}
93+
}
94+
}
95+
Ordering::Greater => {
96+
// 插入值大于当前节点值,应该放到右子树
97+
match &mut self.right {
98+
None => {
99+
// 创建新节点并存入值
100+
self.right = Some(Box::new(TreeNode::new(value)));
101+
}
102+
Some(right_node) => {
103+
// 递归插入
104+
right_node.insert(value);
105+
}
106+
}
107+
}
108+
Ordering::Equal => {
109+
110+
}
111+
}
112+
}
113+
fn search(&self, value: &T) -> bool {
114+
match value.cmp(&self.value) {
115+
Ordering::Less => {
116+
// 要查找的值小于当前节点值,在左子树中查找
117+
match &self.left {
118+
None => false,
119+
Some(left_node) => left_node.search(value),
120+
}
121+
}
122+
Ordering::Greater => {
123+
// 要查找的值大于当前节点值,在右子树中查找
124+
match &self.right {
125+
None => false,
126+
Some(right_node) => right_node.search(value),
127+
}
128+
}
129+
Ordering::Equal => true, // 找到值
130+
}
70131
}
71132
}
72133

0 commit comments

Comments
 (0)