
搜索值,使用前中后序都可以,这里我使用层序遍历进行遍历,使用队列进行遍历
时间复杂度(O(n))
cpp
class Solution {
public:
TreeNode* searchBST(TreeNode* root, int val) {
// TreeNode*node=new TreeNode(0);
//遍历二叉树,找到返回
queue<TreeNode*> que;
que.push(root);
while(!que.empty())
{
TreeNode*node=que.front(); que.pop();
if(node->val==val)
return node;
if(node->left)
que.push(node->left);
if(node->right)
que.push(node->right);
}
return nullptr;
}
};
层序遍历称为BFS,但这里是暴力搜索
cpp
TreeNode* searchBST(TreeNode* root, int val) {
while(root){
if(root->val == val) return root;
else if(val < root->val) root = root->left;
else root = root->right;
}
return nullptr;
}
因为这是二叉搜索树,所以直接比较然后找就行,时间复杂度为O(logN).
下面是递归写法
cpp
class Solution
{
public:
TreeNdoe*searchBST(TreeNdoe*root,int val)
{
if(root==nullptr||root->val==val) return root;
TreeNdoe*result=nullptr;
if(root->val > val) result=searchBST(root->left,val);
if(root->val < val) result=searchBST(root->right,val);
return result;
}