删除的二叉树节点分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;
}
标签:node,right,return,leetcode450,二叉树,root,节点,left From: https://www.cnblogs.com/wangkaixin-yy/p/17695890.html