解题思路
相当于不断地把值为0的叶子结点删除;
后序遍历(递归):对于每一个当前结点node;
判断node的子节点的值是否为0, 若node的子节点的值为0, 如果当node的子节点是叶子结点, 则将node的子节点置为null;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public static TreeNode pruneTree(TreeNode root) {
postOrder(root);
return root;
}
private static void postOrder(TreeNode root){
if(root==null){
return ;
}
postOrder(root.left);
postOrder(root.right);
//1) 若当前root的左子节点的值为0, 如果root的左子节点是叶子结点, 则将root的左子节点置为null
if(root.left!=null&&root.left.val==0&&root.left.left==null&&root.left.right==null){
root.left = null;
}
//1) 若当前root的右子节点的值为0, 如果root的右子节点是叶子结点, 则将root的右子节点置为null
if(root.right!=null&&root.right.val==0&&root.right.left==null&&root.right.right==null){
root.right = null;
}
return ;
}
}