题目描述:
给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。
示例 1:
输入:root = [4,2,6,1,3]
输出:1
示例 2:
输入:root = [1,0,48,null,null,12,49]
输出:1
提示:
树中节点的数目范围是 [2, 100]
0 <= Node.val <= 105
c++代码:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
vector<int> v;
void solve(TreeNode* root){ //前序遍历 根左右
if(root==nullptr)return;
v.push_back(root->val);
if(root->left!=nullptr)solve(root->left);
if(root->right!=nullptr)solve(root->right);
}
int minDiffInBST(TreeNode* root) {
solve(root);
sort(v.begin(),v.end());
int n=v.size();
int min=100000;
for(int i=0;i<n-1;i++){
if(abs(v[i]-v[i+1])<min)min=abs(v[i]-v[i+1]);
}
return min;
}
};
python代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def minDiffInBST(self, root):
v=[]
def solve(root,v):
if root==None:
return
v.append(root.val)
if root.left!=None:
solve(root.left,v)
if root.right!=None:
solve(root.right,v)
solve(root,v)
v.sort()
n = len(v)
min = 100000
for i in range(0,n-1):
if abs(v[i]-v[i+1])<min:
min=abs(v[i]-v[i+1])
return min
总结:
c++中空指针是nullptr,python中空指针是None