题目:
给定一个二叉树根节点root 树的每个节点的值要么是 0要么是1请剪除该二叉树中所有节点的值为 0 的子树。
节点 node 的子树为 node 本身,以及所有 node 的后代。
分析:
首先判断什么样的节点可以被删除,首先,节点的值为0,其次它的子树所有节点值都为0,也就是说如果一个节点可以被删除,那么它的子树所有节点都可以被删除,因此可以判断后序遍历最适合解决这个问题,如果用后序遍历顺序遍历到某个节点,那么它的左右子树的节点一定已经遍历过了,每遍历到一个节点就要确定它是否有左右子树,如果左右子树都为空,并且节点值为0,那么就可以删除这个节点。
代码:
class Solution {
public TreeNode pruneTree(TreeNode root) {
if (root == null){
return root;
}
root.left = pruneTree(root.left);
root.right = pruneTree(root.right);
if (root.left == null && root.right == null && root.val == 0){
return null;
}
return root;
}
}