二叉搜索树的最小绝对差
题目链接:https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/
一、问题描述
给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。
示例:
输入:
1
\
3
/
2
输出:
1
解释:
最小绝对差为 1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
提示:
树中至少有 2 个节点。
二、问题分析
因为这是一颗二叉搜索树,中序遍历该树,可以得到一个有序数列,那么本题就变成了求一个递增数列中任意两个结点的最小差值,那么最小差值肯定在两个相邻节点之间。
三、算法
中序遍历该二叉树,并在遍历过程中记录下最小的差值,然后将差值向上返回
代码:
1 class Solution { 2 int per;//per存储上一个遍历元素的值 3 int ans;//ans作为结果返回 4 public int getMinimumDifference(TreeNode root) { 5 per = -1; 6 ans = Integer.MAX_VALUE; 7 dfs(root); 8 return ans; 9 } 10 11 public void dfs(TreeNode node){ 12 if(node == null){ 13 return; 14 } 15 dfs(node.left); 16 if(per == -1){ 17 per = node.val; 18 }else{ 19 ans = Math.min(ans,node.val-per); 20 per = node.val; 21 } 22 dfs(node.right); 23 } 24 }
这里无需取绝对值,因为搜索二叉树中在后边遍历到的节点一定比前面的节点值大
原文:https://www.cnblogs.com/zyq79434/p/15149958.html