[LC]530题 二叉搜索树的最小绝对差

Posted zf007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LC]530题 二叉搜索树的最小绝对差相关的知识,希望对你有一定的参考价值。

①题目

   

给定一个所有节点为非负值的二叉搜索树,求树中任意两节点的差的绝对值的最小值。

示例 :

输入:

1
   \\
   3
  /
2

输出:
1

解释:
最小绝对差为1,其中 2 和 1 的差的绝对值为 1(或者 2 和 3)。
注意: 树中至少有2个节点。

 

②思路

    这个题我自己没做出来,所以看了别人的题解。

    思路就是,使用中序遍历,在中序遍历的同时,计算差值。

 

③代码

    

 1 class Solution                
 2     TreeNode pre;
 3     int res = Integer.MAX_VALUE;       //res是一个全局变量,作为答案。它的具体计算,在helper函数里。
 4     public int getMinimumDifference(TreeNode root) 
 5         if(root==null)
 6             return 0;
 7         helper(root);
 8         return res;
 9     
10     private void helper(TreeNode root)
11         if(root==null)  return;    //只是return(什么都不做了,跳出此轮的helper函数),而不要return一个数。
12         helper(root.left);
13         if(pre!=null)
14             res = Math.min(res,Math.abs(root.val-pre.val));
15         pre=root;
16         helper(root.right);
17     
18 
19 //中序遍历的结果是升序输出,所以在中序遍历的过程中,计算差值。

  ④学到的知识

     1、中序遍历的核心代码部分就是,在递归时,先输出root.left.val,再输出root.val,最后输出root.right.val。

     2、求两者中小的那个,就用Math.min(a,b)函数就行了,不要写什么if(a<b) return a;else return b;行数又多又不好看。

     3、注意代码里的15行,也就是root什么时候传给pre。

     4、从第10行到12行,就直接可以递归到该BST的左下角那个节点,

     5、大概推一下BST左下角的递归流程:

       技术图片

   马上要上课了,不跟这个旋转了90的图斗争了。

以上是关于[LC]530题 二叉搜索树的最小绝对差的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

代码随想录算法训练营第14天|530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先

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