LeetCode-530. Minimum Absolute Difference in BST

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值