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
}
小笔记
让笔记一步到位~