二叉搜索树中的搜索

题目描述:

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

例如,

给定二叉搜索树:

        4
       / \
      2   7
     / \
    1   3

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

      2     
     / \   
    1   3

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-in-a-binary-search-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 解题思路:

我们知道**二叉搜索树(BST)**的特性:

  • 若它的左子树不为空,则所有左子树上的值均小于其根节点的值
  • 若它的右子树不为空,则所有右子树上的值均大于其根节点得值
  • 它的左右子树也分别为二叉搜索树

那么思路就很简单了:

  • 如果val小于当前结点的值,转向其左子树继续搜索;
  • 如果val大于当前结点的值,转向其右子树继续搜索;
  • 如果已找到,则返回当前结点。
    /**
     * Definition for a binary tree node.
     * type TreeNode struct {
     *     Val int
     *     Left *TreeNode
     *     Right *TreeNode
     * }
     */
    func searchBST(root *TreeNode, val int) *TreeNode {
        if (root == nil) {
            return nil
        }
        if (root.Val > val) { 
            return searchBST(root.Left, val);    
        } else if (root.Val < val) {
            return searchBST(root.Right, val);
        } else {
            return root;
        }
    }
    

      地址:https://mp.weixin.qq.com/s/f9nlhmwyaEDQIx5NvJ63JA

 

posted @ 2020-08-14 09:05  small_lei_it  阅读(110)  评论(0编辑  收藏  举报