码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-08 19:07:10      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:col   nod   旋转   思路   val   image   题解   tree   imu   

①题目

   

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

示例 :

输入:

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题 二叉搜索树的最小绝对差

标签:col   nod   旋转   思路   val   image   题解   tree   imu   

原文地址:https://www.cnblogs.com/zf007/p/11637104.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!