题目要求:
给定二叉搜索树(BST)的根节点 root 和一个整数值 val。
你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。
示例 1:
输入: root = [4,2,7,1,3], val = 2
输出: [2,1,3]
示例 2:
输入: root = [4,2,7,1,3], val = 5
输出: []
提示:
树中节点数在[1, 5000]范围内
1 <= Node.val <= 107
root是二叉搜索树
1 <= val <= 107
解题思路
可以使用递归和迭代两种思路,先说递归的思路,当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
}