给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。
示例 :
输入: 1 \ 3 / 2 输出: 1 解释: 最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
注意: 树中至少有2个节点。
C++
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void dfs(TreeNode* root, vector<int>& tmp)
{
if(root)
{
tmp.push_back(root->val);
dfs(root->left,tmp);
dfs(root->right,tmp);
}
}
int getMinimumDifference(TreeNode* root)
{
vector<int> tmp;
dfs(root,tmp);
sort(tmp.begin(),tmp.end());
int res=INT_MAX;
for(int i=1;i<tmp.size();i++)
{
res=min(res,tmp[i]-tmp[i-1]);
}
return res;
}
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def dfs(self, root, tmp):
if root:
tmp.append(root.val)
self.dfs(root.left,tmp)
self.dfs(root.right,tmp)
def getMinimumDifference(self, root: TreeNode) -> int:
tmp=[]
self.dfs(root,tmp)
tmp=sorted(tmp)
res=float('inf')
for i in range(1,len(tmp)):
res=min(res,tmp[i]-tmp[i-1])
return res