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

营销网站建设资料抚顺网站建设7113

营销网站建设资料,抚顺网站建设7113,名创 网站建设,大同网站建设day19 周日放假 今天依旧是二叉树环节 力扣题部分: 235. 二叉搜索树的最近公共祖先 题目链接:. - 力扣(LeetCode) 题面: 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T …

day19 周日放假 今天依旧是二叉树环节

力扣题部分:

235. 二叉搜索树的最近公共祖先

题目链接:. - 力扣(LeetCode)

题面:

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

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

思路:

        和day18的二叉树公共祖先不同的是,这一次我们可以利用二叉搜索树的特点遍历一个路径就够了,其他的倒没什么太大区别。

具体思路细节内容可以看day18的最后一题 236. 二叉树的最近公共祖先,这里就不重复了。

传送门(day18):代码随想录算法训练营第十八天(二叉树 六)-CSDN博客

代码实现:

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if(p -> val > q -> val) swap(q, p);if(root -> val >= p -> val && root  -> val <= q -> val) return root;if(root -> val < p -> val && root -> right) return lowestCommonAncestor(root -> right, p, q);if(root -> val > q -> val && root -> left) return lowestCommonAncestor(root -> left, p, q);return nullptr;}
};

701.二叉搜索树中的插入操作

题目链接:. - 力扣(LeetCode)

题面:

给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。

注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。

思路:

        按照最简单的想法,一条路径走到底最后创造一个叶子节点挂树上就好了,可以不重构二叉树就不要重构二叉树了,不然就很麻烦(就像下一道题)。

代码实现:

class Solution {
public:TreeNode* insertIntoBST(TreeNode* root, int val) {if(!root){TreeNode* newnode = new TreeNode(val);return newnode;}if(root -> val > val) root -> left = insertIntoBST(root -> left, val);if(root -> val < val) root -> right = insertIntoBST(root -> right, val);return root;}
};

450.删除二叉搜索树中的节点

题目链接:. - 力扣(LeetCode)

题面:

给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

一般来说,删除节点可分为两个步骤:

  1. 首先找到需要删除的节点;
  2. 如果找到了,删除它。

思路:

        我们知道插入可以插入在叶子节点也可以不插入在叶子节点,而删除就没得选择,所有情况都要考虑,那就得按需要删除的结点情况分类讨论了:

1.没找到。

        解决办法:遍历到空节点直接返回。

2.找到了,在叶子节点上。

        解决办法:删除节点并返回空节点。

3.找到了,左边有子树右边没有。

        解决办法:像链表一样,要删除的节点的父节点指向要删除节点的左节点,相当于绕过要删除的节点,然后记得删除释放空间。

4.找到了,右边右子树左边没有。

        解决办法:第三条类似,父节点指向删除节点的右节点。

5.找到了,左右两边都有子树。

        解决办法:最难的部分。先讲操作:将删除节点的左子树头结点(左孩子)放到删除节点的右子树的最左面节点的左孩子上,返回删除节点右孩子为新的根节点

我们知道二叉搜索树要保证中序遍历递增,删除节点的左子树全部比右子树小,该节点一删右节点像之前一样一补上去,整个左子树就悬空了,由于左子树都比右子树小,所以只能把悬空的左子树根节点放在右节点最小的节点左侧,这样就可以让中序遍历仍旧是递增的了。(如果还有点懵,可以尝试画个图自己手动删除节点理解一下)

代码实现:

class Solution {
public:TreeNode* deleteNode(TreeNode* root, int key) {if (root == nullptr) return root; // 第一种情况if (root->val == key) {// 第二种情况if (root->left == nullptr && root->right == nullptr) {delete root;return nullptr;}// 第三种情况else if (root->left == nullptr) {auto retNode = root->right;delete root;return retNode;}// 第四种情况else if (root->right == nullptr) {auto retNode = root->left;delete root;return retNode;}// 第五种情况else {TreeNode* cur = root->right; // 找右子树最左面的节点while(cur->left != nullptr) {cur = cur->left;}cur->left = root->left;TreeNode* tmp = root;root = root->right;delete tmp;return root;}}if (root->val > key) root->left = deleteNode(root->left, key);if (root->val < key) root->right = deleteNode(root->right, key);return root;}
};

http://www.yayakq.cn/news/514760/

相关文章:

  • 孟州网站建设建网站要多少钱一年
  • 做煤网站wordpress4.94中文版
  • 网站空间怎么登陆营销技巧培训ppt
  • 如何提升网站速度seo技能培训课程
  • 嘉兴定制型网站建设哪些网站可以做ppt赚钱
  • 网站没有域名免费oa管理系统
  • 4a级旅游网站建设的要求手机的网站建设目标
  • 江门网站关键词推广众美商务公馆做网站
  • 网站影响seo的标签群晖的网站开发
  • 苏州专业高端网站建设公司揭阳新站seo方案
  • 眉山市网站建设网站建设教程(任务2签订网站建设合同)题库
  • 网站二维码可以做长按识别吗苏州网站快速排名优化
  • 嘉兴优化网站收费标准一个新的网站开发语言
  • 云南专业网站优化wordpress ftp 插件
  • 怎样建个网站建设美妆企业网站
  • 建设局哪个网站查证毕设敦煌壁画网站开发选题背景
  • 如何做起一个网站推广雅布设计师
  • 上海网站制作的费用网站制作的建设大纲ppt
  • 鲜花店的网站建设淄博网站制作建设优化
  • 关于优化网站建设的方案河南省建设厅证件证件查询网站
  • 生态文明建设网站专题培训wordpress端口不生效
  • 赣州建设部网站怎么让网站分享有图片
  • 制作网站一般多少钱微信开发平台公司
  • 网站建设行业论坛凡科做的网站好吗
  • 榆次网站建设公司wordpress留言源码
  • 旅游网站建设规划书模板下载廊坊视频剪辑培训机构
  • 私人公司怎么做网站正规大宗商品交易平台
  • 视频网站文案做蛋糕网站有哪些
  • 聚美优品网站开发时间进度表4免费网站建站
  • .net 开发门户网站单位网站建设情况