我是编程新手,所以请耐心等待。我 https://leetcode.com/problems/binary-tree-pruning/description/解决了这个问题,并写下了这个解决方案:
TreeNode* pruneTree(TreeNode* root) {
if(root==nullptr)
return root;
pruneTree(root->left);
pruneTree(root->right);
if(root->val==0 && root->left==nullptr && root->right==nullptr) {
free(root);
return NULL;
}
return root;
}
但这让我返回了与原始树相同的树,正确答案如下:
TreeNode* pruneTree(TreeNode* root) {
if(root==nullptr)
return root;
root->left=pruneTree(root->left);
root->right=pruneTree(root->right);
if(root->val==0 && root->left==nullptr && root->right==nullptr) {
free(root);
return NULL;
}
return root;
}
有人可以解释一下两个代码之间的区别吗?
处理树时不会修改节点。
root->left=pruneTree(root->left);
root->right=pruneTree(root->right);
VS 你的代码
pruneTree(root->left);
pruneTree(root->right);