首页 > 解决方案 > 如何修改二叉树?

问题描述

所以基本上我被提出了这个问题:https ://leetcode.com/problems/delete-leaves-with-a-given-value/

给定一个二叉树根和一个整数目标,删除所有具有目标值的叶节点。

请注意,一旦您删除了具有值目标的叶节点,如果它的父节点成为叶节点并具有值目标,则它也应该被删除(您需要继续这样做,直到不能删除为止)。

我的解决方案是:

TreeNode* removeLeafNodes(TreeNode* root, int target) {
        if (!root)
            return nullptr;
        TreeNode* checkLeft = removeLeafNodes(root->left, target);
        TreeNode* checkRight = removeLeafNodes(root->right, target);
        if (!checkLeft and !checkLeft and root->val == target){
            root = nullptr;
        }
       return root;    
    }

但是,这并没有修改原始树。

正确的代码是:

TreeNode* removeLeafNodes(TreeNode* root, int target) {
        if (!root)
            return nullptr;
        root->left = removeLeafNodes(root->left, target);
        root->right = removeLeafNodes(root->right, target);
        if (!root->left and !root->right and root->val == target){
            root = nullptr;
        }
       return root;    
    }

我的怎么不改变原来的树?

标签: c++recursiontreebinary-tree

解决方案


要修改输入 true,您需要修改传入指针的left、 和right节点。由于您不这样做,因此您的代码唯一有效的时间是传入的树有一个节点。

要修改root->leftroot->right,您需要使用递归调用的返回值更新它们,如正确版本中所写。


推荐阅读