0x00 题目
给定二叉搜索树(BST)的 根 节点和一个 值
你需要在 BST 中找到节点值 等于 给定值的节点
返回以该节点为根的子树
如果节点不存在,则返回 NULL
0x01 思路
要查找指定的节点,就需要对二叉树进行遍历
由于是 二叉搜索树,不需要遍历所有节点
二叉搜索树 的特点:
左子树的所有节点值,都 小 于该节点
右子树的所有节点值,都 大 于该节点
所以时间复杂度是:O(NlgN)
遍历方式上,有 2 种:
递归 遍历 与 迭代 遍历
0x02 解法
语言:Swift
树节点:TreeNode
public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}
递归法:
func searchBST(_ root: TreeNode?, _ val: Int) -> TreeNode? {
guard let root = root else { return nil }
// 值相等,返回该节点
if val == root.val {
return root
}
// 大于往右找,小于往左找
return val > root.val ? searchBST(root.right, val) : searchBST(root.left, val)
}
迭代法:
func searchBST(_ root: TreeNode?, _ val: Int) -> TreeNode? {
guard let root = root else { return nil }
var t = root
while val != t.val {
// 小于取左,大于取右
t = val < t.val ? t.left : t.right
}
return t
}
0x03 我的小作品
欢迎体验我的作品之一:小五笔 86 版
五笔学习好帮手!
App Store 搜索即可~