783. Minimum Distance Between BST Nodes

题目

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。。。。这难道是当年测试样例比较少的缘故?那是不是其实之前我做的结果其实已经是最优复杂度了,不用再去想怎么改进了?

猜你喜欢

转载自blog.csdn.net/u013457310/article/details/82871226