给定一个二叉搜索树的根结点 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 {
public:
int minDiffInBST(TreeNode* root) {
vector<int> vec = getInOrder(root);
int minDiff = INT_MAX;
int num1 = vec[0];
for(int i=1; i<vec.size(); i++){
int diff = vec[i] - num1;
if(diff < minDiff) minDiff = diff;
num1 = vec[i];
}
return minDiff;
}
vector<int> getInOrder(TreeNode* root){
vector<int> res;
if(root==NULL) return res;
if(root->left!=NULL){
vector<int> vec1 = getInOrder(root->left);
for(int i=0; i<vec1.size(); i++) res.push_back(vec1[i]);
}
res.push_back(root->val);
if(root->right!=NULL){
vector<int> vec2 = getInOrder(root->right);
for(int i=0; i<vec2.size(); i++) res.push_back(vec2[i]);
}
return res;
}
};