题目
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
- 树中至少有 2 个节点。
- 本题与 783 https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/ 相同
解题
对于二叉搜索树,中序遍历的结果正好是从小到大的,只要当前的节点的值和上一个节点的值 的绝对差,最小即可。
python解法
# Definition for a binary tree node. # class TreeNode: # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution: def getMinimumDifference(self, root: TreeNode) -> int: stack = [] cur = root prev = None best = float('inf') while cur or stack: while cur: stack.append(cur) cur = cur.left cur = stack.pop() if prev: best = min(best,abs(cur.val-prev.val)) prev = cur cur = cur.right return best
c++解法
class Solution { public: int getMinimumDifference(TreeNode* root) { int num=INT_MAX; stack<TreeNode*> stack; TreeNode* cur=root; TreeNode* prev=nullptr; while(!stack.empty()||cur){ while(cur){ stack.push(cur); cur=cur->left; } cur=stack.top(); stack.pop(); if(prev) num=min(num,abs(prev->val-cur->val)); prev = cur; cur=cur->right; } return num; } };