0x00 题目

给你一个二叉搜索树的根节点 ​​root​​​ 返回树中任意两不同节点值之间的 ​​最小​​ 差值


0x01 思路

二叉搜索树 ​​中序遍历​​​ 是一个升序数组
最小差值只能是 ​​​相邻节点​


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 minDiffInBST(_ root: TreeNode?) -> Int {
// 记录前一个节点的值
var pre = -1
// 记录差值
var res = Int.max

func find(_ root: TreeNode?) {
guard let root = root else { return }

// 前序遍历位置
find(root.left)

// 中序遍历位置
if pre == -1 {
pre = root.val
}else{
// 计算并保存最小差值
res = min(res, root.val - pre)
// 记录节点值
pre = root.val
}

find(root.right)
// 后序遍历位置
}

// 查找
find(root)

return res
}

小五笔

经典的 ​​86​​ 版

当然还有 ​​98​​ 版

苹果 iOS 14 已经自带 ​​五笔输入法​​ 了