leetcode450删除搜索二叉树的节点

发布时间 2023-09-12 13:14:52作者: iu本u

删除的二叉树节点分4种情况:

  • 叶子节点,直接删除就行
  • 左节点不为空,右节点为空;直接将左子树返回
  • 左节点为空,右节点不为空;直接将右子树返回
  • 左节点和右节点不为空;将右子树最小的节点作为根节点,返回右子树
TreeNode* deleteNode(TreeNode* root, int key) {
        if(!root)return nullptr;
        if(root->val==key){
            if(!root->left&&!root->right){
                return nullptr;
            }else if(!root->left&&root->right){
                return root->right;
            }else if(root->left&&!root->right){
                return root->left;
            }else{
                TreeNode* node=root->right;
                while(node->left)node=node->left;
                node->left=root->left;
                return root->right;
            }
        }
            if(key>root->val)root->right=deleteNode(root->right,key);
            if(key<root->val)root->left=deleteNode(root->left,key);
        return root;
    }