Vison's Blog
所有文章
文章总览
编辑器
Publications
About Me
Search
目录
#toc-container
下载Markdown文件
【4.13】LeetCode每日一题· 二叉搜索树节点最小距离
2021年04月13日 13时18分
标签:
LeetCode
树形结构
## 题目描述 给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。 注意:本题与[530:二叉搜索树的最小绝对差](https://leetcode-cn.com/problems/minimum-absolute-difference-in-bst/ "530:二叉搜索树的最小绝对差")相同 #### 示例1  ``` 输入:root = [4,2,6,1,3] 输出:1 ``` #### 示例2  ``` 输入:root = [1,0,48,null,null,12,49] 输出:1 ``` #### 提示 ``` 树中节点数目在范围 [2, 100] 内 0 <= Node.val <= 10^5 ``` #### 来源 > 来源:力扣(LeetCode) > 链接:[题目链接](https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes "题目链接") ## 解题思路 考察**二叉排序树(二叉搜索树)**这一数据结构的基本概念。 对于**二叉搜索树**,其中序遍历即是从小到大排好序的数组,因此任意两节点的最小差值,即为其中序遍历中,任意前后两个节点之间的最小差值,即(下标从1开始) ```math \displaystyle ans = \min_{i=1}^{n-1}\{a[i+1]-a[i]\} ``` 我们可以先对二叉搜索树进行中序遍历,然后再遍历中序遍历的结果得到答案;也可以在遍历的时候,记录当前节点的**前驱节点**的值,这样就可以边遍历边记录答案,不用显式地创建数组来保存,时间和空间复杂度常数较小。 ## 代码 ```cpp /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: int pre = -1, ans = INT_MAX; void dfs(TreeNode* root){ if(!root) return; dfs(root->left); if(pre == -1){ pre = root->val; }else{ ans = min(ans, root->val - pre); pre = root->val; } dfs(root->right); } int minDiffInBST(TreeNode* root) { dfs(root); return ans; } }; ``` ## 用时和内存 > 执行用时:0 ms,在所有 C++提交中击败了100.00%的用户 > 内存消耗:9.4 MB,在所有 C++提交中击败了61.4%的用户
所有评论
166****5019
回复
2021年04月13日 15:18:09
参与主题/评论回复
166****5019 发表于2021年04月13日 15:18:09
回复评论
邮箱
图形验证码
邮箱验证码
发送验证码
新增评论
评论
邮箱
邮箱仅作验证使用
图形验证码
邮箱验证码
发送验证码
发表评论
所有评论
参与主题/评论回复