来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes
题目
给定一个二叉搜索树的根结点 root, 返回树中任意两节点的差的最小值。
示例:
输入: root = [4,2,6,1,3,null,null]
输出: 1
解释:
! 注意,root是树结点对象(TreeNode object),而不是数组。
给定的树 [4,2,6,1,3,null,null] 可表示为下图:
4
/ \
2 6
/ \
1 3
最小的差值是 1, 它是节点1和节点2的差值, 也是节点3和节点2的差值。
注意:
二叉树的节点个数范围在 2 到 100。
二叉树总是有效的,每个节点的值都是整数,且不重复。
算任意两个结点的最小差值。把所有的节点的值找出来,算相邻值的最小差
方法。
class Solution {
struct Stack {
var stackArr = [TreeNode]()
var count: Int {
return stackArr.count
}
mutating func push(node: TreeNode) -> Void {
stackArr.append(node)
}
mutating func pop() -> TreeNode {
return stackArr.popLast()!
}
}
func minDiffInBST(_ root: TreeNode?) -> Int {
var stack = Stack()
var curNode = root
var curValArr = [Int]()
//先把所有的根节点加到栈中,值加到数组中
while curNode != nil || stack.count != 0 {
if curNode != nil {
if curNode!.left != nil {
stack.push(node: curNode!.left!)
}
if curNode!.right != nil {
stack.push(node: curNode!.right!)
}
}
if stack.count != 0 {
curNode = stack.pop()
curValArr.append(curNode!.val)
}else {
curNode = nil
}
}
//排序,算相依值
curValArr.sort()
var result:Int = curValArr.last!
for i in 0..<(curValArr.count - 1) {
result = ((abs(curValArr[i] - curValArr[i+1]) < result) ? abs(curValArr[i] - curValArr[i+1]) : result)
}
return result
}
}
网友评论