235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode)

思路

不用改树结构,直接找到空结点位置插入
类似之前的二叉树的公共祖先,由二叉树最下面进行遍历,由下往上,特别关注的是二叉搜索树是一个有序的数组,要利用这个特性

代码

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/class Solution {public:TreeNode *traversal(TreeNode *cur,TreeNode*p,TreeNode*q){if(cur==NULL) return cur;//中if(cur->val>p->val && cur->val>q->val){TreeNode *left=traversal(cur->left,p,q);if(left != NULL){return left;}}if(cur->val<p->val&&cur->val<q->val){TreeNode *right=traversal(cur->right,p,q);if(right!=NULL){return right;}}return cur;}TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {return traversal(root,p,q);}};

701. 二叉搜索树中的插入操作 - 力扣(LeetCode)

思路

转换很难:
例如插入元素10 ,需要找到末尾节点插入便可,一样的道理来插入元素15,插入元素0,插入元素6,
需要调整二叉树的结构么? 并不需要。
只要遍历二叉搜索树,找到空节点 插入元素就可以了,那么这道题其实就简单了。
接下来就是遍历二叉搜索树的过程了。

代码

/*** 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 {private:TreeNode *parent;//找到空节点导入void traversal(TreeNode *cur,int val){if(cur==NULL){//生成节点TreeNode *node= new TreeNode(val);if(val>parent->val){parent->right=node;}else{parent->left=node;}return ;}parent=cur;if(cur->val>val) traversal(cur->left,val);if(cur->val<val) traversal(cur->right,val);return ;}public:TreeNode* insertIntoBST(TreeNode* root, int val) {parent = new TreeNode(0);if(root==NULL){root=new TreeNode(val);}traversal(root,val);return root;}};

450. 删除二叉搜索树中的节点 - 力扣(LeetCode)

思路

树的结构会改变
转换为有序数组,依次比较然后插入值,再将数组转换为二叉搜索树
重点:
有序数组转换:中序递归遍历,生成有序数组,
后序遍历转换回去二叉树?

代码

/*** 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: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 && root->right !=nullptr){auto retnode=root->right;delete root;return retnode;}//右孩子为空,左孩子不为空else if(root->left != nullptr && root->right==nullptr){auto retnde=root->left;delete root;return retnde;}//左右孩子都不为空else {// 右孩子作为根节点,左孩子作为右孩子的左孩子TreeNode *cur=root->right;while(cur->left){cur=cur->left;}cur->left=root->left;auto node=root->right;delete root;return node;}}if(root->val<key) root->right=deleteNode(root->right,key);if(root->val>key) root->left=deleteNode(root->left,key);return root;}};

力扣235|701|450相关推荐

  1. day22 二叉树| 235,701,450

    235. 二叉搜索树的最近公共祖先 可以按照二叉树的最近公共祖先进行操作 也可以按照搜索树的特征,无需进行回溯,从上到下进行遍历 701.二叉搜索树中的插入操作 ​​​​​​​将固定的数值插入到合适的 ...

  2. 力扣235. 二叉搜索树的最近公共祖先(JavaScript)

    var lowestCommonAncestor = function(root, p, q) {return dd(root,p,q) }; const dd=function(root,p,q){ ...

  3. leetcode(力扣)刷题笔记(c++、python)【上】

    文章预览: 数组 1.二分查找 704. 二分查找 相关题目: 35.搜索插入位置 34. 在排序数组中查找元素的第一个和最后一个位置 69.x 的平方根 367.有效的完全平方数 2.双指针 27. ...

  4. 【力扣】数据结构入门【7天32题数据结构入门】

    Frame Appendix [力扣]链表问题总结 [力扣]c++中常用命令--菜鸟专用 7天32题计划[点击加入计划] 代码 217. 存在重复元素 53. 最大子序和 1. 两数之和 88. 合并 ...

  5. (力扣)171.Excel表列序号(c语言)

    题目 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称.返回该列名称对应的列序号. 例如, A -> 1 B -> 2 C -> 3 ... Z -> ...

  6. LeetCode 力扣算法题解汇总,All in One

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: https://fuxuemingzhu.cn 关键词:LeetCode,力扣,算法,题解,汇总,解析 把自己刷过的所有题目做一个整理, ...

  7. 力扣学习记录(每日更新)

    文章目录 引言 简单 力扣:1 两数之和 力扣:20 有效的括号 力扣:21 合并两个有序链表 力扣:22 括号生成 力扣:27 移除元素 力扣: 35 搜索插入位置 力扣:70 [爬楼梯](http ...

  8. 几乎刷完了力扣所有的树题,我发现了这些东西

    点击蓝色"力扣加加"关注我哟 加个"星标",带你揭开算法的神秘面纱! ❝ 这是力扣加加第「28」篇原创文章 先上下本文的提纲,这个是我用 mindmap 画的一 ...

  9. LeetCode -- 力扣算法题解题心得 -- (个人笔记记录)持续更新~~

    一.前言 正式开启数据结构+算法研究的历程,准备好一年后的面试.下面的解法不一定是最优解,只求能力提升,会定期更新~~ 二.目录 1 2 19 20 21 24 35 42 83 86 94 96 1 ...

最新文章

  1. vc++ 6.0下Glut的配置 及 Glut 框架介绍
  2. qt show widget_Qt中show()与exec()
  3. 关于J2EE中死锁问题的研究(2)
  4. Visual Studio 2010 C++ 工程文件解读
  5. 《南方都市报》:三鹿集团300万摆平搜索引擎?
  6. 表格列隐藏_WPS表格(Excel)基础编辑
  7. 132.分割回文串II
  8. 什么软件可以换电脑ip地址
  9. 科目二考试之侧方位停车步骤
  10. 查找重复姓名的SQL语句
  11. 史上最全的数据库面试题,面试前刷一刷
  12. 2020身高体重标准表儿童_婴儿身高体重对照表2020
  13. 【BZOJ1014】【JSOI2008】火星人prefix Splay处理区间,hash+dichotomy(二分)check出解
  14. 微信小程序支持windows PC版了
  15. 男人,女人一生要过五个关卡【曾仕强】
  16. Java Build工具Ant与Maven之比较
  17. vue上传文件,重新上传后覆盖之前文件
  18. 芝诺悖论------芝诺的乌龟
  19. row在C语言什么意义,ROWC是什么意思
  20. 康佳液晶电视(非智能)Mstar V56 芯片

热门文章

  1. 生成3的乘方表(C语言)
  2. No link elements found in urdf file
  3. BZOJ 1115: [POI2009]石子游戏Kam
  4. 2020最受欢迎的7个vue管理后台框架
  5. DirectX 11各组件的介绍第一个DirectX 11 Demo的创建
  6. 三子棋原来可以这样写
  7. NFVA35065L32 IGBT 650V 汽车智能功率模块 (ASPM) 特征
  8. Dlib 人脸Landmark检测速度优化
  9. 个人收藏的50部经典UMD电影的ISO镜像文件
  10. KALI2021安装中文输入法