二叉搜索树的最小绝对差(使用中序遍历当成有序数组来处理)

530. 二叉搜索树的最小绝对差

难度简单

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

差值是一个正数,其数值等于两值之差的绝对值。

思路

题目需要求在二叉搜索树上任意两节点的差的绝对值的最小值。

注意是二叉搜索树,二叉搜索树可是有序的!

在二叉搜索树上进行中序遍历,获得的其实就是一个有序数组,在有序数组上求最小差值,是不是就很简单了?

package cn.edu.xjtu.carlWay.tree.minAbsoluteDifferenceInBST;

import cn.edu.xjtu.Util.TreeNode.TreeNode;

/**
 * 530. 二叉搜索树的最小绝对差
 * 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
 * <p>
 * 差值是一个正数,其数值等于两值之差的绝对值。
 * <p>
 * https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
 */
public class Solution {
    int result = Integer.MAX_VALUE;
    TreeNode pre = null;

    /**
     * 想象成中序遍历的话就是一个有序数组了
     *
     * @param root
     * @return
     */
    public int getMinimumDifference(TreeNode root) {
        if (root == null) return 0;
        traversal(root);
        return result;
    }

    private void traversal(TreeNode root) {
        if (root == null) {
            return;
        }
        // 遍历左子树
        traversal(root.left);
        
        // 在中间进行数据处理
        if (pre != null) {
            result = Math.min(result, root.val - pre.val);
        }
        pre = root;
        
        // 遍历右子树
        traversal(root.right);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hydrion-Qlz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值