前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 450. 删除二叉搜索树中的节点

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

作者头像
Michael阿明
发布2020-07-13 15:30:02
4100
发布2020-07-13 15:30:02
举报

参考 二叉搜索树删除操作

  • 要删除节点有2子节点,找到右子树中最小的节点,将其val值覆盖要删除的节点值,再删除这个最小节点
  • 要删除的节点的子节点为1个或0个,直接将要删除的节点的父节点指向子的子节点
代码语言:javascript
复制
class Solution {
public:
    TreeNode* deleteNode(TreeNode* root, int key) {
    	TreeNode *parent = NULL, *cur = root;
        while(cur && cur->val != key)
        {
        	parent = cur;
        	if(cur->val < key)
        		cur = cur->right;
        	else
        		cur = cur->left;
        }
        if(cur == NULL)
        	return root;
        if(cur->left != NULL && cur->right != NULL)
        {//要删除的节点有2个子节点,找到右子树最小的换上去,在删除
        	TreeNode *minP = cur->right, *minPfather = cur;
        	while(minP->left)
        	{
        		minPfather = minP;
        		minP = minP->left;
        	}
        	cur->val = minP->val;
        	cur = minP;//要删除的cur
        	parent = minPfather;
        }
        //要删除的节点有1个或0个子节点
    	TreeNode *child;
    	if(cur->left)
    		child = cur->left;
    	else if(cur->right)
    		child = cur->right;
    	else
    		child = NULL;
    	if(parent == NULL)//要删的是根节点
    		root = child;
    	else if(cur == parent->left)
    		parent->left = child;
    	else
    		parent->right = child;
        return root;
    }
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/10/14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档