private int maxPathDown(TreeNode node) {
		if (node == null)
			return 0;
		int left = Math.max(0, maxPathDown(node.left));		//get left side max branch
		int right = Math.max(0, maxPathDown(node.right));	//get right side max branch
		maxValue = Math.max(maxValue, left + right + node.val);	//compare to max value and update
		return Math.max(left, right) + node.val;			//only return max to upper level.
	}