首页 > 其他分享 >代码随想录Day33

代码随想录Day33

时间:2022-12-01 01:33:59浏览次数:54  
标签:pre TreeNode cur 代码 随想录 Day33 result null root

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

给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。

示例:

提示:树中至少有 2 个节点。

思路:由于是二叉搜索树,可以用中序遍历,把二叉树变成有序数组,进而问题转化为求有序数组的任意两节点的最小值。

既然是有序数组,那么任意两节点的最小值只能在相邻两节点之间产生。把输出的有序数组挨个比较即可。

 

代码:

class Solution {
    TreeNode pre;// 记录上一个遍历的结点
    int result = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
       if(root==null)return 0;
       traversal(root);
       return result;
    }
    public 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);
    }
}

迭代法-中序遍历

 

 

 

class Solution {
    TreeNode pre;
    Stack<TreeNode> stack;
    public int getMinimumDifference(TreeNode root) {
        if (root == null) return 0;
        stack = new Stack<>();
        TreeNode cur = root;
        int result = Integer.MAX_VALUE;
        while (cur != null || !stack.isEmpty()) {
            if (cur != null) {
                stack.push(cur); // 将访问的节点放进栈
                cur = cur.left; // 左
            }else {
                cur = stack.pop(); 
                if (pre != null) { // 中
                    result = Math.min(result, cur.val - pre.val);
                }
                pre = cur;
                cur = cur.right; // 右
            }
        }
        return result;
    }
}

 

标签:pre,TreeNode,cur,代码,随想录,Day33,result,null,root
From: https://www.cnblogs.com/dwj-ngu/p/16940273.html

相关文章

  • 嵌入代码与外部文件
    内部外部的区别可维护性(引入外部脚本更加易于维护)可缓存(公共外部js可通过缓存提高性能)文档模式(用的非常少)针对ie浏览器出现的一种不同行为标准的模式设计混杂模......
  • 常用代码模板2——数据结构
    常用代码模板2——数据结构单链表//head存储链表头节点的下标,e[]存储节点的值,ne[]存储节点的next指针,idx表示当前可以用的最新的点的下标inthead,e[N],ne[N],idx;......
  • 常用代码模板5——动态规划
    动态规划模型例题dp分析法状态表示集合描述:所有满足条件1、条件2、……的元素的集合(其中每个条件对应状态表示的每一维、元素意义对应求解的量)集合属性:最大值,最小值,......
  • 常用代码模板6——贪心
    贪心夹逼定理(若a>=b,b>=a,则a==b)证明用当前方法得到的结果就等于最优解区间问题可以尝试的突破口:排序(按左端点或右端点或双关键字排序)常用证明方法:基本......
  • 常用代码模板4——数学知识
    常用代码模板4——数学知识数论质数在大于1的整数中,如果只有1和本身这两个约数,就被称为质数或素数所有小于等于1的整数既不是质数也不是合数试除法判定质数时间复......
  • 常用代码模板1——基础算法
    常用代码模板1——基础算法快速排序算法模板voidquick_sort(intq[],intl,intr){if(l>=r)return;inti=l-1,j=r+1,x=q[l+r>>1];......
  • C#-简易公式计算器代码实现
    计算器如图所示,仅实现加减乘除及括号功能,公式错误时会有提示。首先建立一个inputList,每点击数据一下,便将内容添加至inputList中,点击后退时则删除List中最后一个元素。......
  • 案例-文件下载-代码实现。中文文件名问题
    案例-文件下载-代码实现文件下载需求:1.页面显示超链接2.点击超链接后弹出下载提示框3.完成图片文件下载分析:1.超链接......
  • python用ARIMA模型预测CO2浓度时间序列实现|附代码数据
    全文下载链接:http://tecdat.cn/?p=20424时间序列为预测未来数据提供了方法。根据先前的值,时间序列可用于预测经济,天气的趋势。时间序列数据的特定属性意味着通常需要专门......
  • 11月《代码大全2中文版》读书笔记
    本月,我进行了对《代码大全2》第四章《关键的“构建”决策》的学习,以下是我个人的一些学习心得。在决策的第一步,我们要做的就是选择编程语言,因为编程语言对于软件......