1. 题目描述

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

例如,

给定二叉搜索树:

  1. 4
  2. / \
  3. 2 7
  4. / \
  5. 1 3

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

  1. 2
  2. / \
  3. 1 3

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

2. 解题思路

可以用迭代和递归的方法实现

3. 代码实现

迭代:

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @param {number} val
  11. * @return {TreeNode}
  12. */
  13. var searchBST = function(root, val) {
  14. while(root){
  15. if(root.val === val){
  16. return root
  17. }else if(root.val <val){
  18. root = root.right
  19. }else{
  20. root = root.left
  21. }
  22. }
  23. return null
  24. };

递归:

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val) {
  4. * this.val = val;
  5. * this.left = this.right = null;
  6. * }
  7. */
  8. /**
  9. * @param {TreeNode} root
  10. * @param {number} val
  11. * @return {TreeNode}
  12. */
  13. var searchBST = function(root, val) {
  14. if(!root){
  15. return null
  16. }
  17. if(root.val === val){
  18. return root
  19. }else if(root.val < val){
  20. return searchBST(root.right, val)
  21. }else{
  22. return searchBST(root.left, val)
  23. }
  24. };

4. 提交结果

迭代:
700. 二叉搜索树中的搜索 - 图1
递归:
700. 二叉搜索树中的搜索 - 图2