leetcode-700. 二叉搜索树中的搜索

67 阅读1分钟

题目要求:

给定二叉搜索树(BST)的根节点 root 和一个整数值 val

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:
image.png
输入: root = [4,2,7,1,3], val = 2
输出: [2,1,3]

示例 2:

image.png
输入: root = [4,2,7,1,3], val = 5
输出: []

提示
树中节点数在 [1, 5000] 范围内
1 <= Node.val <= 107
root 是二叉搜索树
1 <= val <= 107

链接leetcode.cn/problems/se…

解题思路

可以使用递归和迭代两种思路,先说递归的思路,当root的值与当前值相等时直接返回,当val<root.Left的时候,需要继续递归root.Left,右值也是一致。

代码

/**
 * 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 root
	}
	if val < root.Val {
		return searchBST(root.Left, val)
	}
	return searchBST(root.Right, val)
}

迭代的思路:二叉搜索树,左节点小于root,root小于右节点,根据比较左数和右数的和与val的值,移动节点,最终返回root

代码

/**
 * 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 {
			return root
		}
		if val < root.Val {
			root = root.Left
		} else {
			root = root.Right
		}
	}
	return nil
}