算法每日一刷

783. 二叉搜索树结点最小距离(Swift)

2019-06-29  本文已影响0人  entre_los_dos

来源:力扣(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
    }
}
上一篇下一篇

猜你喜欢

热点阅读