剑指 Offer II 047. 二叉树剪枝

写麻烦了

flag

对于叶子节点表示val是0还是1

对于非叶子节点表示子节点删没删

dfs就好了

写了free就报错,不知道是我写的方式错了,还是oj有问题。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
    void dfs(TreeNode* &root, int &flag)
    {
        if(root->val == 0) flag = 1;
        else flag = 0;
        if(root->left == nullptr && root->right == nullptr)
        {
            if(flag == 0) return;
            //free(r);
            root = nullptr;
            return;
        }
        if(root->left) dfs(root->left, flag);
        int flag1 = flag;
        if(root->right) dfs(root->right, flag);
        int flag2 = flag;
        if(flag1 == 1 && flag2 == 1 && root->val == 0)
        {
            TreeNode* r = root;
            //free(r);
            root = nullptr;
        }
        else
        {
            flag = 0;
        }
        return;
    }

public:
    TreeNode* pruneTree(TreeNode* root) {
        int flag = -1;
        dfs(root, flag);
        return root;
    }
};
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
原文地址:https://www.cnblogs.com/WTSRUVF/p/15377030.html