Leetcode 783. Minimum Distance Between BST Nodes

Link to the problem

The main idea was to apply in-order traversal to the BST.
One key observation is that for a triad of nodes, one only has to compare the left and right child to its parent. There is no need to check the difference between the left child and right child because it is a BST, meaning that the difference between these two children must be larger than that between a child and its parent.

Moreover, suppose we’ve already known the min difference of this triad of nodes, then we only need to compare the right child to its grandparent (if there is one) cuz that is the only possibility that generates a smaller difference.

The traversal order of in-order traversal perfectly solves this problem. First, we traverse the BST to its leftmost child and memorize its value to a variable, say previous. Then, the in-order traversal would lead us to its parent, which enables us to calculate the difference between these two nodes. After the calculation, we change the value of the variable to the value of the parent. Following the traversal order, we reach the right child and calculate the difference, compare it with the one we calculated in the previous step, and set the prev to the value of the right child. In the next phase, we are able to calculate the difference between the right child and its grandparent. These are all calculations required to find the minimum difference in the BST.

Following is a potential solution to this problem:

class Solution {
    Integer res; 
    Integer prev;

    public int minDiffInBST(TreeNode root) {
        res = Integer.MAX_VALUE;
        prev = null;
        inorder(root);
        return res;
    }

    public void inorder(TreeNode root) {
        if(root == null) return;
        inorder(root.left);
        if(prev !=  null){
            res = Math.min(res, root.val - prev);
        }
        prev = root.val;
        inorder(root.right);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值