题目
Given a Binary Search Tree (BST) with the root node root, return the minimum difference between the values of any two different nodes in the tree.
Example :
Input: root = [4,2,6,1,3,null,null]
Output: 1
Explanation:
Note that root is a TreeNode object, not an array.
The given tree [4,2,6,1,3,null,null] is represented by the following diagram:
4
/ \
2 6
/ \
1 3
while the minimum difference in this tree is 1, it occurs between node 1 and node 2, also between node 3 and node 2.
Note:
The size of the BST will be between 2 and 100.
The BST is always valid, each node’s value is an integer, and each node’s value is different.
思路
就是个中序遍历,计算和上一个节点的差然后取最小值的问题。
代码
/**
* 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 {
int lastnum = 0;
bool findfirst = false;
int dif = INT_MAX;
public:
int minDiffInBST(TreeNode* root) {
midOrder(root);
return dif;
}
void midOrder(TreeNode* root){
if(root == NULL)
return;
midOrder(root->left);
if(!findfirst){
findfirst = true;
lastnum = root->val;
}
else{
int cur_dif = root->val-lastnum;
if(cur_dif < dif)
dif = cur_dif;
lastnum = root->val;
}
midOrder(root->right);
return;
}
};
感想
这个代码耗时4ms,榜上有0ms的,我把那份代码拷贝提交了一下结果发现耗时也是4ms。。。。这难道是当年测试样例比较少的缘故?那是不是其实之前我做的结果其实已经是最优复杂度了,不用再去想怎么改进了?