以下代码有什么问题?

时间:2019-12-25 11:46:39

标签: c++

我有两个关于问题Binary Tree Pruning的代码。
这是错误的代码

class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(root == NULL)
            return NULL;
        if((root->left = pruneTree(root->left)) == NULL &&
           (root->right = pruneTree(root->right)) == NULL){
            if(root->val == 0){
                delete root;
                return NULL;
            }       
        }
        return root;
    }
};

这是我通过的代码

class Solution {
public:
    TreeNode* pruneTree(TreeNode* root) {
        if(root == NULL)
            return NULL;
        root->left = pruneTree(root->left);
        root->right = pruneTree(root->right);
        if(root->left == NULL && root->right == NULL){
            if(root->val == 0){
                delete root;
                return NULL;
            }       
        }
        return root;
    }
};

我想知道是什么原因导致两个程序之间的差异

1 个答案:

答案 0 :(得分:0)

在第二个代码中,确保同时调用text-align: left;pruneTree(root->left),因为它们是两个单独的表达式。

pruneTree(root->right)

在第一个代码中,您拥有:

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

这里的区别是(root->left = pruneTree(root->left)) == NULL && (root->right = pruneTree(root->right)) == NULL pruneTree(root->left)在一个表达式中,因此它们(在这种情况下,可能)彼此依赖。

如果pruneTree(root->right)的求值结果为(root->left = pruneTree(root->left)) == NULL,则不需要评估false之后的分词,因为完整的表达式不再适用。