代码随想录Day33
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; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理