二叉树修剪



我是编程新手,所以请耐心等待。我 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);   

最新更新