Итак, в основном мне задали этот вопрос: https://leetcode.com/problems/delete-leaves-with-a-given-value/
Учитывая двоичное дерево root и целочисленную цель, удалите все конечные узлы со значением target .
Обратите внимание, что после удаления листового узла с целевым значением, если его родительский узел становится листовым узлом и имеет целевое значение, он также должен быть удален (вам нужно продолжать делать это до тех пор, пока вы не сможете ).
Мое решение было:
TreeNode* removeLeafNodes(TreeNode* root, int target) {
if (!root)
return nullptr;
TreeNode* checkLeft = removeLeafNodes(root->left, target);
TreeNode* checkRight = removeLeafNodes(root->right, target);
if (!checkLeft and !checkLeft and root->val == target){
root = nullptr;
}
return root;
}
Однако это не изменило исходное дерево.
Правильный код:
TreeNode* removeLeafNodes(TreeNode* root, int target) {
if (!root)
return nullptr;
root->left = removeLeafNodes(root->left, target);
root->right = removeLeafNodes(root->right, target);
if (!root->left and !root->right and root->val == target){
root = nullptr;
}
return root;
}
Как мое не меняет исходное дерево?