二叉树修剪

时间:2018-08-08 14:06:37

标签: binary-tree

我是编程新手,请耐心等待。我正在解决这个问题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;            
}    

有人可以解释两个代码之间的区别吗?

1 个答案:

答案 0 :(得分:-1)

在处理树时,您不会修改节点。

root->left=pruneTree(root->left);   
root->right=pruneTree(root->right);

VS您的代码

pruneTree(root->left);   
pruneTree(root->right);