代码随想录训练营Day22二叉树Part08|235. 二叉搜索树的最近公共祖先|701.二叉搜索树中的插入操作|450.删除二叉搜索树中的节点

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

  • 相比于236,这题加了个二叉搜索树的条件,236方法也能做,但是没利用搜索数的特性
  • 理解:当我们从上向下去递归遍历,第一次遇到 cur节点是数值在[p, q]区间中,那么cur就是 p和q的最近公共祖先

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

  • 相对简单
  • 注意细节:
TreeNode* node(val);         //当val不是一个确定的数时,这样会报错!!
//应该如下
TreeNode* node = new TreeNode(val); 

//当node == nullptr时
root->val = val;             //不可以!,因为root根本不存在
//应该如下
TreeNode* node = new TreeNode(val);
root = node;

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

  • 较难,涉及到结构的调整,要把每一种情况都分析清楚
  • 分析情况(五种情况):1、没有找到节点,不删;2、删除的是叶子节点;3、删除的不是叶子节点,左不为空,右为空,直接让父节点指向左孩子;4、删除的不是叶子节点,左为空,右不为空;5、删除的不是叶子节点,左右都不空,最复杂
  • 用c++删除节点需要释放内存
TreeNode* temp = node;       //将要删除的node节点空间保存标记一下
node = node->right;          //给node这个名称赋新节点
delete temp;                 //删除原始node节点空间
  • 删除节点的操作在终止条件里面,删除节点只是终止前的最后一步操作,并不是中间循环步骤
  • 递归函数有返回值,返回子节点
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值