**
814. Binary Tree Pruning
**
思路:
1、去掉的节点的条件是,左子树为空,右子树也为空,而且该节点的值为0;
2、根据第一点,则我们应该采用后续去遍历这颗二叉树,来判断它的左子树和右子树的情况;
3、还有一点就是要剪掉该节点,那么要去找到它的父节点,在父节点上剪掉它;
解决代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode pruneTree(TreeNode root) {
afterPruneTree(root);
return root;
}
public void afterPruneTree(TreeNode root) {
if(root == null) {
return ;
}
if(root.left == null && root.right == null) {
return ;
}
afterPruneTree(root.left);
afterPruneTree(root.right);
if(root.left != null && root.left.left == null && root.left.right == null && root.left.val == 0) {
root.left = null;
}
if(root.right != null && root.right.left == null && root.right.right == null && root.right.val == 0) {
root.right = null;
}
}
}