700. 二叉搜索树中的搜索

递归

解题思路

  1. 二叉搜索树的 左子树所有节点的元素值均小于根的元素值右子树所有节点的元素值均大于根的元素值

  2. 据此可以得到如下算法:

    • root 为空则返回空节点;
    • val == root.val,则返回 root
    • val < root.val,需要递归左子树,继续向寻找;
    • val > root.val,需要递归右子树,继续向右寻找;

复杂度

  1. 时间复杂度:O(N),其中 N 是二叉搜索树的节点数,最坏情况下二叉搜索树是一条链,且要找的元素比链末尾的元素值还要小(大),这种情况下需要递归 N 次;

  2. 空间复杂度:O(N),最坏情况下递归需要 O(N) 的栈空间;

代码实现

var searchBST = function (root, val) {
    if (root === null) return root;

    if (root.val === val) return root;

    if (root.val > val) return searchBST(root.left, val);

    if (root.val < val) return searchBST(root.right, val);
};

迭代

复杂度

  1. 时间复杂度:O(N),其中 N 是二叉搜索树的节点数,最坏情况下二叉搜索树是一条链,且要找的元素比链末尾的元素值还要小(大),这种情况下需要迭代 N 次;

  2. 空间复杂度:O(N),最坏情况下递归需要 O(N) 的栈空间;

代码实现:

var searchBST = function (root, val) {
    while (root) {
        if (val === root.val) {
            return root;
        }
        root = val < root.val ? root.left : root.right;
    }

    return null;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 递归
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现
  2. 2. 迭代
    1. 2.1. 复杂度
    2. 2.2. 代码实现: