Leetcode 814. 二叉树剪枝 C++

Leetcode 814. 二叉树剪枝

题目

给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。

返回移除了所有不包含 1 的子树的原二叉树。

( 节点 X 的子树为 X 本身,以及所有 X 的后代。)

测试样例

示例1:
输入: [1,null,0,0,1]
输出: [1,null,0,null,1]

解释: 
只有红色节点满足条件“所有不包含 1 的子树”。
右图为返回的答案。

Leetcode 814. 二叉树剪枝 C++_第1张图片

示例2:
输入: [1,0,1,0,0,0,1]
输出: [1,null,1,null,1]
Leetcode 814. 二叉树剪枝 C++_第2张图片

示例3:
输入: [1,1,0,1,1,0,1,0]
输出: [1,1,0,1,1,null,1]
Leetcode 814. 二叉树剪枝 C++_第3张图片

说明:

  • 给定的二叉树最多有 100 个节点。
  • 每个节点的值只会为 0 或 1 。

题解

递归
如果自身节点及左、右子树都为0,则进行剪枝,也就是让父节点指向该节点的值为NULL。详细过程见代码

代码

	bool isCut(TreeNode* root){
     
        if(root==NULL)  return true;
        bool left = isCut(root->left);		
        if(left)    root->left = NULL;		//左子树剪枝,则置null
        bool right = isCut(root->right);
        if(right)    root->right = NULL;		//右子树剪枝,则置null
        return root->val==0 && left && right; 		//本身为0,左右子树都剪枝,则自身需剪枝
    }
    TreeNode* pruneTree(TreeNode* root) {
     
        if(isCut(root)) root = NULL;
        return root;
    }

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

你可能感兴趣的:(Leetcode 814. 二叉树剪枝 C++)