原题链接(https://leetcode.cn/problems/pOCWxh/)
题目描述
给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1。请剪除该二叉树中所有节点的值为 0 的子树。节点 node 的子树为 node 本身,以及所有 node 的后代。
示例1
示例2
示例3
数据限制
- 二叉树的节点个数的范围为[1,200]
- 二叉树节点的值只能是0或1
思路
对于叶子节点只要他是0的话那么这么节点就要删除毕竟叶子节点没有子节点,删除之后如果它没有兄弟节点那么他的父节点就是叶子节点,那么又要去判断它的值是否为0,如果为0那么就需要删除掉这个节点,如果它父节点又会重蹈覆辙则还需要继续删除。从这个流程不难看出,这题的关注点是叶子节点的删除以及父节点的更迭。所以可以采用递归的方法,从叶子节点开始处理,并且回溯的时候同步处理它的父节点。最后得到最终的处理完的二叉树。
如示例2的流程就应该是
代码
public TreeNode pruneTree(TreeNode root) {
if(root==null)
return null;
root.left=pruneTree(root.left);
root.right=pruneTree(root.right);
if(root.val==0&&root.left==null&&root.right==null) {
return null;
}
return root;
}