当前位置: 首页 > news >正文

昆明 做网站 vr软件定制开发公司

昆明 做网站 vr,软件定制开发公司,一级建造师培训机构排名前十,软件开发用什么工具打卡第21天,继续二叉树,前几天终于补完了,感觉难度上来了。 今日任务 530.二叉搜索树的最小绝对差501.二叉搜索树中的众数 二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 给你一个二叉搜索树的根节点 root ,返回 树中任意两不…

打卡第21天,继续二叉树,前几天终于补完了,感觉难度上来了。

今日任务

  • 530.二叉搜索树的最小绝对差
  • 501.二叉搜索树中的众数
    1. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差

给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值 。
差值是一个正数,其数值等于两值之差的绝对值。

在这里插入图片描述
在这里插入图片描述

我的题解

突然有了这个想法,左子树的最右,右子树的最左的值是跟目前这个结点的值最接近的,差值也是最小,然后递归遍历左右子树,比较四个值哪个最小。

class Solution {
public:int getMinimumDifference(TreeNode* root) {// 找到本结点左边最大的值,就是值最接近本结点的值TreeNode *cur1 = root->left;while(cur1 != NULL && cur1->right != NULL) {cur1 = cur1->right;}int num1 = INT_MAX;if(cur1 != NULL) num1 = root->val - cur1->val;// 找到本结点右边最小的值TreeNode *cur2 = root->right;while(cur2 != NULL && cur2->left != NULL) {cur2 = cur2->left;}int num2 = INT_MAX;if(cur2 != NULL) num2 = cur2->val - root->val;int l = INT_MAX, r = INT_MAX;// 左右递归if(root->left) l = getMinimumDifference(root->left);if(root->right) r = getMinimumDifference(root->right);return min(min(num1, num2), min(l, r));}
};

代码随想录

利用中序遍历所有结点,得到中序遍历的结点值数组,统计更新 节点值之间的最小差值

class Solution {
private:
vector<int> vec;
void traversal(TreeNode* root) {if (root == NULL) return;traversal(root->left);vec.push_back(root->val); // 将二叉搜索树转换为有序数组traversal(root->right);
}
public:int getMinimumDifference(TreeNode* root) {vec.clear();traversal(root);if (vec.size() < 2) return 0;int result = INT_MAX;for (int i = 1; i < vec.size(); i++) { // 统计有序数组的最小差值result = min(result, vec[i] - vec[i-1]);}return result;}
};

中序遍历递归,保存前一个结点,然后跟目前的结点的值进行计算比较。

class Solution {
public:TreeNode * pre = NULL;int res =INT_MAX;void tarversal(TreeNode* root) {if(root == NULL) return ;tarversal(root->left); //左// 中if(pre != NULL) {res = min(res, root->val - pre->val);}pre = root;tarversal(root->right); //右}int getMinimumDifference(TreeNode* root) {tarversal(root);return res;}
};

501.二叉搜索树中的众数

给你一个含重复值的二叉搜索树(BST)的根节点 root,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。
如果树中有不止一个众数,可以按 任意顺序 返回。
假定 BST 满足如下定义:

  • 结点左子树中所含节点的值 小于等于 当前节点的值
  • 结点右子树中所含节点的值 大于等于 当前节点的值
  • 左子树和右子树都是二叉搜索树

在这里插入图片描述

代码随想录

普通二叉树做法

用unordered_map 统计出各结点值的个数,然后排序,找到频率最高的。

class Solution {
public:unordered_map<int, int> cnt;vector<int> res;void tarversal(TreeNode* root) {if(root == NULL) return ;tarversal(root->left);cnt[root->val]++;tarversal(root->right);}bool static cmp(const pair<int, int> &a, const pair<int, int> &b) {return a.second > b.second;}vector<int> findMode(TreeNode* root) {if(root == NULL) return res;tarversal(root);vector<pair<int, int>> vec(cnt.begin(), cnt.end());sort(vec.begin(), vec.end(), cmp);res.push_back(vec[0].first);for(int i = 1; i < vec.size(); i++) {if(vec[i].second == vec[0].second) res.push_back(vec[i].first);else break;}return res;}
};

搜索二叉树做法

搜索二叉树的中序遍历,会得到一个单调不递减的数组。
当发现当前结点跟前一个结点数值相同,该结点的频率值更新,当发现目前结点的频率值大于最大频率值,更新最大频率值,更新结果集res,当发现目前结点的频率值等于最大频率值,更新结果集。

class Solution {
public:int maxcnt = 0; //最大值频率值int cnt = 0; // 目前结点的频率值vector<int> res;TreeNode* pre = NULL;void tarversal(TreeNode* root) {if(root == NULL) return ;tarversal(root->left);if(pre == NULL) { // 第一个结点cnt = 1;} else if(pre->val == root->val){//与前面的结点相同cnt++;} else {//与前面结点不相同cnt = 1;}pre = root;if(cnt == maxcnt) {//如果和最大值相同,收集到结果res.push_back(root->val);}if(cnt > maxcnt) {//如果计数大于最大值maxcnt = cnt; //更新最大值res.clear(); //更新结果集res.push_back(root->val);}tarversal(root->right);}vector<int> findMode(TreeNode* root) {tarversal(root);return res;}
};

236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

在这里插入图片描述
在这里插入图片描述

代码随想录

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(root == NULL) return NULL;if(root == p || root == q) return root;TreeNode *lNode = lowestCommonAncestor(root->left, p, q); // 左 TreeNode *rNode = lowestCommonAncestor(root->right, p, q); // 右// 中if(lNode && rNode) return root;if(lNode && !rNode) return lNode;if(!lNode && rNode) return rNode;return NULL;}
};

在这里插入图片描述

http://www.hkea.cn/news/804127/

相关文章:

  • 郑大远程教育动态网站建设seo优化关键词排名
  • 做logo什么网站昆明百度关键词优化
  • 怎样做省钱购物网站sem推广代运营
  • 英文网站开发公司万网阿里云域名查询
  • 做调查问卷网挣钱的网站新闻 今天
  • 网站建设工作小组在线建站平台免费建网站
  • 可以发广告的网站湖南seo推广系统
  • 大丰网站建设哪家好成都seo
  • 学校网站建设项目的wbsseo交流qq群
  • 筑梦网站建设西安百度竞价开户
  • 个体营业执照可以做网站搞推广吗推广网站制作
  • 公共交通公司网站建设方案移动慧生活app下载
  • 国内开源代码网站搜了网推广效果怎么样
  • html5 metro风格网站模板今日新闻事件
  • 网站不在首页显示出来做网络推广
  • 上海网站seo公司网页推广平台
  • 网站服务器租用价格表百度怎么发布自己的广告
  • 经纪人做网站技巧搜索引擎入口yandex
  • 教育网站制作哪家服务好全球外贸采购网
  • 响应式网络网站源码百度关键词查询网站
  • 南京网站制作设计公司网络运营团队
  • 阿里巴巴上怎样做自己的网站seo网站优化网站编辑招聘
  • 网站做付费推广都需要问什么网络热词2022
  • 给男票做网站表白的软件产品市场推广计划书
  • 西安网站制作定制怎么制作自己的个人网站
  • wordpress 如何移动端盐城seo优化
  • asp.net 制作网站开发百度竞价排名软件
  • 百度爱采购推广平台天津网络推广seo
  • 福州市闽侯县建设局网站推广引流吸引人的文案
  • wordpress目录 读写权限泰安短视频seo