代码解决
/*** 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_MAXint result = INT_MAX;// 用于记录前一个节点的指针TreeNode* pre = nullptr;// 中序遍历函数void traversal(TreeNode* node){// 如果节点为空,则返回if(node == nullptr) return;// 递归遍历左子树traversal(node->left);// 处理当前节点if(pre != nullptr){// 更新最小差值result = min(result, node->val - pre->val);}// 更新前一个节点指针pre = node;// 递归遍历右子树traversal(node->right);}// 获取二叉搜索树中任意两节点值之间的最小差值int getMinimumDifference(TreeNode* root) {// 开始中序遍历traversal(root);// 返回计算出的最小差值return result;} };
- 定义一个全局变量
result
用于记录最小差值,初始化为INT_MAX
。- 定义一个全局变量
pre
用于记录中序遍历过程中的前一个节点。- 定义一个辅助函数
traversal
,它接受当前节点作为参数。- 如果当前节点为空,则返回。
- 递归地遍历左子树。
- 处理当前节点:
- 如果
pre
不为空,更新最小差值result
为当前节点值与pre
节点值之差的最小值。- 更新
pre
为当前节点。- 递归地遍历右子树。
- 在
getMinimumDifference
函数中,开始中序遍历,并返回计算出的最小差值result
。这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是树中节点的数量。空间复杂度也是 O(n),因为需要存储递归调用的栈。