LeetCode-530. Minimum Absolute Difference in BST

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zy2317878/article/details/79957795

Description

Given a binary search tree with non-negative values, find the minimum absolute difference between values of any two nodes.

Example

Input:

   1
    \
     3
    /
   2

Output:
1

Explanation:
The minimum absolute difference is 1, which is the difference between 2 and 1 (or between 2 and 3).

Note

There are at least two nodes in this BST.

Solution 1(C++)

class Solution {
public:
    void TraverseTree(TreeNode* node, int &prev, int &res){
        if(!node) return;
        TraverseTree(node->left,prev,res);
        if(prev!=-1) res=min(res,node->val-prev);
        prev=node->val;
        TraverseTree(node->right,prev,res);
    }
    int getMinimumDifference(TreeNode* root) {
        int res=INT_MAX, prev=-1;
        TraverseTree(root,prev,res);
        return res;
    }
};

算法分析

我之前写的使用了vecotr来按照前序遍历的方法遍历BST的,但是还是要学会不适用额外的储存空间应该如何解决问题。那么这道题就是很经典的前序遍历了。

程序分析

前序遍历的基本套路我已经熟悉了,那么中序,后序如法炮制。但是要注意的是,不适用额外的储存空间,如何传递之前的节点值。其实解法一可以分为三步走。

  1. 前序遍历:先向左走
  2. 回到中间,如果pre不是-1,就可以对res更新;如果pre是-1,那么就不更新res。走到node,都要将node更新为pre
  3. 前序遍历:最后向右走

其实这里的道理不难懂。前序遍历无非就是:左 - > 中 - > 右。 一直往左的时候,pre没有办法更新,自然就是设定的初始值-1。当左边走完了,就自然回到了中,下一步就是右了,那么在右之前,中就应该成为了pre。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页