Remove Subtree if Sum Zero

题目:
一棵树,如果subtree的和为0,那么去掉这个树。

解题思路:
这道题就是采用buttom-up的方法来做。

代码:
public class RemoveSubtreeifSumZero {

    public TreeNode remove(TreeNode root){
        if(root == null){
            return null;
        }
        int left = helper(root.left);
        int right = helper(root.right);
        if(left == 0){
            root.left = null;
        }
        if(right == 0){
            root.right = null;
        }
        if(root.val + left + right == 0){
            return null;
        }
        return root;
    }

    private int helper(TreeNode root){
        if(root == null){
            return 0;
        }
        int left = helper(root.left);
        int right = helper(root.right);
        if(left == 0){
            root.left = null;
        }
        if(right == 0){
            root.right = null;
        }
        return root.val + left + right;
    }

    public static void main(String[] args){
        /*        *             6        *         3        4        *     -1   -2    7    5        *        *        * */        TreeNode node6 = new TreeNode(6);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node1 = new TreeNode(-1);
        TreeNode node2 = new TreeNode(-2);
        TreeNode node7 = new TreeNode(7);
        TreeNode node5 = new TreeNode(5);
        node6.left = node3;
        node6.right = node4;
        node3.left = node1;
        node3.right = node2;
        node4.left = node7;
        node4.right = node5;
        RemoveSubtreeifSumZero removeSubtreeifSumZero = new RemoveSubtreeifSumZero();
        TreeNode rst = removeSubtreeifSumZero.remove(node6);

        rst.print(rst);

    }

}




Comments

Popular Posts