代码随想录刷题攻略---二叉搜索树1--搜索

例题

 二叉搜索树(BST)在二叉树的基础上多了一些条件:在BST中的任何一个子树中,左子树结点的值小于父结点的值,右子树结点的值大于父结点的值。因为BST本身的有序属性,解决一些问题会很方便。

 递归法

用递归法来解决这道题,在每一次递归中处理当前结点、以及它的左子树或右子树。根据我们在之前二叉树的递归遍历中记录的方法:

1.确定递归函数的参数和返回值

递归函数的目的是找出值合适的结点并返回,故递归函数的参数为BST的根结点和要搜索的数值val。

2.终止条件

若当前结点的值是要搜索的数值val,那么递归就可以结束了并返回当前访问的结点。

3.确定单层递归的逻辑

每一层递归中,我们判断当前的结点的值是否等于val,若是,递归结束,返回该结点指针;若否,我们将当前结点的值与val进行比较,确定往左子树遍历还是往右子树遍历。

要注意的点是之前的递归函数都是没有返回值的(void),但这题要求返回结点指针结果,所以我们需要用载体来接收递归调用的返回值,最后返回。

code:

class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        TreeNode* res;
        if(root == NULL)
        return NULL;
        if(root->val == val)
        return root;
        else if(root ->val < val)
        res=searchBST(root->right,val);
        else
        res=searchBST(root->left,val);
        return res;
    }
};

迭代法 

这道题也可以用迭代法来做,创建一个指针来完成二叉搜索法遍历的任务,直接指针为NULL或者指向的结点为目标值为止结束。

code:

class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        while (root != NULL) {
            if (root->val > val) root = root->left;
            else if (root->val < val) root = root->right;
            else return root;
        }
        return NULL;
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值