814. 二叉树剪枝
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/binary-tree-pruning
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
原题目不好理解,就是如果子树都是0那么就删除子树。
其实是一道回溯的题目,遍历到叶子节点后,返回,如果左右子树返回的不是null,说明这个节点是不能删除的,返回这个节点。
如果返回的都是null,就判断下这个节点要不要删除在,值是1不删除;值是0删除,即返回null;
public TreeNode pruneTree(TreeNode root) {
if(root == null) {
return null;
}
// 得到左右子树返回的节点
TreeNode left = pruneTree(root.left);
TreeNode right = pruneTree(root.right);
//这一步很重要,重新给该节点赋值
root.left = left;
root.right = right;
// 如果返回的不是null, 说明该节点是不能删除的,
if(left != null || right != null) {
return root;
}
// 如果返回的都是null,则需要判断下该节点的值,是1,不能删,是0,删除
return root.val == 0 ? null: root;
}