leetcode 算法题700 (简单179) 二叉搜索树中的搜索

leetcode 算法题700 (简单179) 二叉搜索树中的搜索

  • 题目介绍
给定二叉搜索树(BST)的根节点和一个值。
你需要在BST中找到节点值等于给定值的节点。
返回以该节点为根的子树。
如果节点不存在,则返回 NULL。
  • 示例

给定二叉搜索树:

       4
      / \
     2   7
    / \
   1   3

和值: 2
你应该返回如下子树:

     2
    / \
   1   3

在上述示例中,如果要找的值是 5,但因为没有节点值为 5,我们应该返回 NULL

  • 解法一
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
  if(!root) {
    return null;
  }
  if(root.val === val) {
    return root;
  }
  if(root.val > val) {
    return searchBST(root.left, val);
  }
  return searchBST(root.right, val);
};

执行用时 : 124 ms, 在所有 JavaScript 提交中击败了32.10%的用户

内存消耗 : 41.7 MB, 在所有 JavaScript 提交中击败了73.81%的用户

  • 解法二
/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
  while(root && root.val !== val) {
    if(root.val > val) {
      root = root.left;
    } else {
      root = root.right;
    }
  }
  return root;
};

执行用时 : 88 ms, 在所有 JavaScript 提交中击败了97.53%的用户

内存消耗 : 41.7 MB, 在所有 JavaScript 提交中击败了80.95%的用户

  • 解法三

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
  if(!root) {
    return null;
  }
  let temp = [root];
  while(temp.length) {
    let i = 0, tArray = [];
    while(i < temp.length) {
      let node = temp[i++];
      if(node.val === val) {
        return node;
      }
      if(node.val > val) {
        if(node.left) {
          tArray.push(node.left)
        }
      } else {
        if(node.right) {
          tArray.push(node.right)
        }
      }
    }
    temp = tArray;
  }
  return null;
};

执行用时 : 84 ms, 在所有 JavaScript 提交中击败了98.77%的用户

内存消耗 : 41.5 MB, 在所有 JavaScript 提交中击败了95.24%的用户

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值