Leetcode530+783
题目
链接: 530.
链接: 783.
题目描述:给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
示例:
输入:root = [4,2,6,1,3]
输出:1
思路
二叉搜索树是自带排序的,进行一次中序遍历即可。
中序遍历通过深度搜索实现。
两道题不同之处仅仅在于530没有说明节点上限。
不足之处
初始写的时候考虑是把中序遍历的全部结果存下来再进行比较,会耗费过多的空间,实际上没必要。
直接通过深度搜索返回最近的两个节点指针并进行差值比较即可。
自己的代码
class Solution {
public:
void dfs(TreeNode* r, int* a, int* iadd){ //深度搜索
if(r->left != nullptr)
dfs(r->left, a, iadd);
a[*iadd] = r->val;
*iadd = *iadd + 1;
if(r->right != nullptr)
dfs(r->right, a, iadd);
}
int minDiffInBST(TreeNode* root) {
int a[100];
int i = 0;
int* iadd = &i;
int min = 0;
dfs(root, a, iadd);
min = a[1] - a[0];
for(int j = 1; j < i - 1; j++){
if (min > (a[j + 1] - a[j]))
min = a[j + 1] - a[j];
}
return min;
}
};
官方代码
class Solution {
public:
void dfs(TreeNode* root, int& pre, int& ans) {
if (root == nullptr) {
return;
}
dfs(root->left, pre, ans);
if (pre == -1) {
pre = root->val;
} else {
ans = min(ans, root->val - pre);
pre = root->val;
}
dfs(root->right, pre, ans);
}
int minDiffInBST(TreeNode* root) {
int ans = INT_MAX, pre = -1;
dfs(root, pre, ans);
return ans;
}
};
// 作者:LeetCode-Solution
// 链接:https://leetcode-cn.com/problems/minimum-distance-between-bst-nodes/solution/er-cha-sou-suo-shu-jie-dian-zui-xiao-ju-8u87w/
// 来源:力扣(LeetCode)
// 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
新知识
c++中有min函数,比较两个传入的参数,返回较小值。