700. Search in a Binary Search Tree
Analysis
在二叉搜索树中,查找与给定值相同的结点,并返回这个结点。
Code
dfs
1 | class Solution { |
bfs
1 | class Solution { |
loop
由于二叉搜索树具有左边小右边大性质,这个题还可以写的更直接:1
2
3
4
5
6
7
8
9
10
11
12class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
if(!root) return root;
while(root) {
if(root->val == val) return root;
else if(root->val > val) root = root->left;
else root = root->right;
}
return nullptr;
}
};
实际上,这就是二分查找。
701. Insert into a Binary Search Tree
Analysis
这个题与上面的题基本一致,只是需要插入一个结点,实际上就是在查找插入的位置。
Code
dfs
1 | class Solution { |
bfs
1 | class Solution { |
loop
同样,根据二叉搜索树的性质,也可以直接用循环来做:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class Solution {
public:
TreeNode* insertIntoBST(TreeNode* root, int val) {
if(!root) return new TreeNode(val);
TreeNode *tmp = root;
while(root) {
if(root->val > val) {
if(root->left) root = root->left;
else {
root->left = new TreeNode(val);
break;
}
} else {
if(root->right) root = root->right;
else {
root->right = new TreeNode(val);
break;
}
}
}
return tmp;
}
};
Summary
这几天有关树的题都不难,所以尽量把能想到的方法都写出来。