public int getMaxSoFar(TreeNode node) {
		if(node == null) return 0;
		if(node.left == null && node.right == null) {
			if(node.val > res) res = node.val;	// 1st bug :(
			return node.val;
		}
		
		int left = getMaxSoFar(node.left);
		int right = getMaxSoFar(node.right);
		
		res = getMax(res, node.val + left + right);
		res = getMax(res, node.val + getMax(left, right));
		
		return node.val + getMax(0, getMax(left, right));
	}