LeetCode700. 二叉搜索树中的搜索Golang版

LeetCode700. 二叉搜索树中的搜索Golang版

1. 问题描述

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

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

2. 思路

2.1. 递归思路

  1. 确定递归函数参数和返回值
	func *TreeNode searchBST(root *TreeNode, val int)
  1. 确定终止条件
	if root == nil || root.Val == val {
		return root
	}
  1. 确定单层递归逻辑
	if root.Val > val, 搜索左子树
	if root.Val < val, 搜索右子树
	return nil

2.2. 迭代思路

  1. 一般二叉树迭代法,使用栈来模拟深度优先遍历,使用队列模拟广度优先遍历;二叉搜索树由于其节点的有序性,不需要辅助栈或队列就可以写出迭代法。
  2. 一般二叉树递归过程中,会有回溯过程,一个分支走到头了,要进行掉头,再走左右分支;对于二叉搜索树,不需要回溯的过程,节点有序性可以确定搜索的方向,也就是搜索某一特定节点时,搜索路径是提前规划好的。

3. 代码

3.1. 递归代码

/**
 * 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 || root.Val == val {
        return root
    }

    if root.Val > val {
        return searchBST(root.Left, val)
    }

    if root.Val < val {
        return searchBST(root.Right, val)
    }

    return nil
}

3.2. 迭代代码

/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func searchBST(root *TreeNode, val int) *TreeNode {
    for root != nil {
        if root.Val < val {
            root = root.Right
        } else if root.Val > val {
            root = root.Left
        } else {
            return root
        }
    }
    return nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值