二叉树:搜索树的最小绝对差
利用二叉搜索树的特性搞起!
530.二叉搜索树的最小绝对差给你一棵所有节点为非负值的二叉搜索树 , 请你计算树中任意两节点的差的绝对值的最小值 。
示例:
文章插图
提示:树中至少有 2 个节点 。
思路题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值 。
「注意是二叉搜索树」 , 二叉搜索树可是有序的 。
遇到在二叉搜索树上求什么最值啊 , 差值之类的 , 就把它想成在一个有序数组上求最值 , 求差值 , 这样就简单多了 。
递归那么二叉搜索树采用中序遍历 , 其实就是一个有序数组 。
「在一个有序数组上求两个数最小差值 , 这是不是就是一道送分题了 。 」
最直观的想法 , 就是把二叉搜索树转换成有序数组 , 然后遍历一遍数组 , 就统计出来最小差值了 。
代码如下:
class Solution {private:vector以上代码是把二叉搜索树转化为有序数组了 , 其实在二叉搜素树中序遍历的过程中 , 我们就可以直接计算了 。
需要用一个pre节点记录一下cur节点的前一个节点 。
如图:
文章插图
一些同学不知道在递归中如何记录前一个节点的指针 , 其实实现起来是很简单的 , 大家只要看过一次 , 写过一次 , 就掌握了 。
代码如下:
class Solution {private:int result = INT_MAX;TreeNode* pre;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;}};是不是看上去也并不复杂!
迭代看过这两篇二叉树:听说递归能做的 , 栈也能做, 二叉树:前中后序迭代方式的写法就不能统一一下么? 文章之后 , 不难写出两种中序遍历的迭代法 。
下面我给出其中的一种中序遍历的迭代法 , 代码如下:
class Solution {public:int getMinimumDifference(TreeNode* root) {stack st;TreeNode* cur = root;TreeNode* pre = NULL;int result = INT_MAX;while (cur != NULL || !st.empty()) {if (cur != NULL) { // 指针来访问节点 , 访问到最底层st.push(cur); // 将访问的节点放进栈cur = cur->left;// 左} else {cur = st.top();st.pop();if (pre != NULL) {// 中result = min(result, cur->val - pre->val);}pre = cur;cur = cur->right;// 右}}return result;}};总结「遇到在二叉搜索树上求什么最值 , 求差值之类的 , 都要思考一下二叉搜索树可是有序的 , 要利用好这一特点 。 」
同时要学会在递归遍历的过程中如何记录前后两个指针 , 这也是一个小技巧 , 学会了还是很受用的 。
后面我将继续介绍一系列利用二叉搜索树特性的题目 。
「就酱 , 感觉学到了 , 就转发给身边需要的同学吧」
-------end-------
【二叉树:搜索树的最小绝对差】我将算法学习相关的资料已经整理到了
Github : , 里面还有leetcode刷题攻略、各个类型经典题目刷题顺序、思维导图 , 可以fork到自己仓库有空看一看一定会有所收获 , 顺便给一个star支持一下吧!
我是程序员Carl , 哈工大师兄 , 先后在腾讯和百度打杂 , 这里每天8:35准时推送一道经典算法题目 , 我选择的每道题目都不是孤立的 , 而是由浅入深 , 环环相扣 , 帮你梳理算法知识脉络 , 轻松学算法!
@代码随想录 期待你的关注
- “树标提质”提升“软实力”数字经济时代创新载体大有可为
- 搜索|iOS版WhatsApp更新:增加新的墙纸和贴纸搜索功能
- 群号|创建qq群后为什么没有群号或者别人搜索不到该群?
- 每天有超过10亿人使用Google搜索
- 树莓派4安装Ubuntu20.04通过SD卡设置wifi
- iOS版WhatsApp更新:增加新的墙纸和贴纸搜索功能
- 二叉状态树的结构,Part-1
- 二叉树:求搜索树中的众数
- pydotplus的安装、基本入门和决策树的可视化
- IDEA 常用快捷键
