本文最后更新于617 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
视频讲解:https://www.bilibili.com/video/BV1tP41177us
1.顺便一提上一个题701插入一个节点都是在二叉搜索树上的叶子结点插入才会显得比较简单,但是这个题就会改变这个树的结构了,所以就又会有难度了。
2.这个题让我对于内存管理也有一个深刻认识,以前对于这个delete没有什么认识,今天给了一个比较明确的内存释放的规则,让我内存管理的部分也有了一个更加深刻的印象,同时这个题的这个思路也真是给我眼前一亮,让我看到了迭代里的每一个题的终止条件都让我明白了严谨的重要性,希望通过一天又一天的刷题我也可以只靠自己的思路完成整个题。
CPP
/**
* 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* traversal(TreeNode*node , int key){
if(node == NULL)return NULL;
if(node->val == key){
if(node->left == NULL && node->right == NULL){
delete node;
return nullptr;
}else if(node->left != NULL && node->right == NULL){
TreeNode* leTemp = node->left;
delete node;
return leTemp;
}else if(node->left == NULL && node->right != NULL){
TreeNode* riTemp = node->right;
delete node;
return riTemp;
}else{
TreeNode* cur = node->right;
while(cur->left != NULL){
cur = cur->left;
}
cur->left = node->left;
TreeNode* biTemp = node;
node = node->right;
delete biTemp;
return node;
}
}
if(node->val > key)node->left = traversal(node->left , key);
if(node->val < key)node->right = traversal(node->right , key);
return node;
}
TreeNode* deleteNode(TreeNode* root, int key) {
return traversal(root, key);
}
};