Problem: 530. 二叉搜索树的最小绝对差
Reference
https://www.programmercarl.com/0530.%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E7%9A%84%E6%9C%80%E5%B0%8F%E7%BB%9D%E5%AF%B9%E5%B7%AE.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%AF%BE
思路
中序遍历,可以得到递增序列,求差值,最小绝对差值,相邻的元素差值最小。
遇到中序遍历求解的题目,需要用到上一个节点和当前节点比较,所以我们最好保存上一个节点,这样才方便于当前节点比较。
递归返回条件: node == nullpter;
零时保存的变量: preNode 上一个节点 maxDif最大差值
处理中间节点: 将当前节点与上一个节点的差值比较,如果大于maxDif则更新maxDif。
处理完毕中间节点,更新preNode。
复杂度
时间复杂度:
添加时间复杂度, 示例: $O(n)$
空间复杂度:
添加空间复杂度, 示例: $O(n)$
Code
[]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public: int res; TreeNode* pre; void traversal(TreeNode* node) { if (node == nullptr) return; traversal(node->left); cout << node->val << endl; if (pre != nullptr) res = std::min<int>(res, node->val - pre->val); pre = node; traversal(node->right); } int getMinimumDifference(TreeNode* root) { res = INT_MAX; traversal(root); return res; } };
|