首页 > 编程语言 > 详细

408算法练习——二叉搜索树的最小绝对差

时间:2021-08-16 23:03:30      阅读:49      评论:0      收藏:0      [点我收藏+]

二叉搜索树的最小绝对差

题目链接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 }

  这里无需取绝对值,因为搜索二叉树中在后边遍历到的节点一定比前面的节点值大

408算法练习——二叉搜索树的最小绝对差

原文:https://www.cnblogs.com/zyq79434/p/15149958.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!