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

文章介绍了两种方法解决二叉树问题,一种是中序遍历并递归排序求最小差值,另一种是利用双指针法减少空间开销。两种方法都针对有序特性进行优化。
摘要由CSDN通过智能技术生成

在这里插入图片描述

思路1:中序遍历,递归排序成有序数组;因为是有序,只需要求相邻两个值的最小差值。

class Solution {
    ArrayList <Integer> list = new ArrayList();
    int ans = 100001;//题目最大 100000
    public int getMinimumDifference(TreeNode root) {
        getMinimumDifference1(root);
        //遍历计算排序好的两个最小绝对值。
        for(int i=list.size()-1;i>0;i--) {
           ans = Math.min(ans, list.get(i) - list.get(i-1));
        }
        return ans;
    }

//中序遍历,递归排序成有序数组
    public void getMinimumDifference1(TreeNode root) {
        if(root == null) return;
        getMinimumDifference1(root.left);
        list.add(root.val);
        getMinimumDifference1(root.right);
    }

    
}

思路2:双指针法:中序遍历是有序的,在遍历的时候顺便相减,可以像有序数组的特性一样,一直相减,记录两个差值的最小绝对值。能少开一个数组的空间


class Solution {
    int ans = 100001;
    TreeNode preNode = null; //前一个节点
    public int getMinimumDifference(TreeNode root) {
        getMinimumDifference1(root);
        return ans;
    }

    //curNode 当前节点
    public void getMinimumDifference1(TreeNode curNode) {
        if(curNode == null) return;
        //左
        getMinimumDifference1(curNode.left);
        
        //中
        if(preNode != null) {
            ans = Math.min(ans, curNode.val - preNode.val);
        }
        //让preNode  一直跟在 curNode 后一个身位
        preNode = curNode;
        
        //右
        getMinimumDifference1(curNode.right);
    }
    
}

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值