三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

19 二叉搜索树的最小绝对差

19  二叉搜索树的最小绝对差

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

简单

相关标签

premium lock icon相关企业

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值

差值是一个正数,其数值等于两值之差的绝对值。

示例 1:

img

输入:root = [4,2,6,1,3]
输出:1

示例 2:

img

输入:root = [1,0,48,null,null,12,49]
输出:1

提示:

  • 树中节点的数目范围是 [2, 104]
  • 0 <= Node.val <= 105

注意:本题与 783 https://leetcode.cn/problems/minimum-distance-between-bst-nodes/ 相同


class Solution {
public:vector<int> result;void traversal(TreeNode* cur){if(cur==NULL) return;//中序遍历(左中右)traversal(cur->left);result.push_back(cur->val);traversal(cur->right);}int getMinimumDifference(TreeNode* root) {traversal(root);int ans = INT_MAX;int len = result.size();for(int i=0;i<len-1;i++){ans = min(result[i+1]-result[i],ans);}return ans;}
};
  • 暴力解法:把这个二叉搜索树进行中序遍历,遍历之后就是一个递增的数组(相邻的差值最小),求出最小差值即可

class Solution {
private:
int result = INT_MAX;
TreeNode* pre = NULL;
void traversal(TreeNode* cur) {if (cur == NULL) return;traversal(cur->left);   // 左if (pre != NULL){       // 中result = min(result, cur->val - pre->val);}pre = cur; // 记录前一个traversal(cur->right);  // 右
}
public:int getMinimumDifference(TreeNode* root) {traversal(root);return result;}
};
  • 双指针法:暂时还看不懂,和上一题类似,如果只是应付考研机试或者蓝桥杯竞赛的话会暴力解法已经可以了,二刷的时候着重看一下,这里先跳过
← 返回列表