我是编程新手,请耐心等待。我正在解决这个问题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;
}
有人可以解释两个代码之间的区别吗?
答案 0 :(得分:-1)
在处理树时,您不会修改节点。
root->left=pruneTree(root->left);
root->right=pruneTree(root->right);
VS您的代码
pruneTree(root->left);
pruneTree(root->right);