function completeTreeValue(dataNode) {
	        // Postorder travel tree.
	        // If value of none-leaf node is not set,
	        // calculate it by suming up the value of all children.
	        var sum = 0;

	        zrUtil.each(dataNode.children, function (child) {

	            completeTreeValue(child);

	            var childValue = child.value;
	            zrUtil.isArray(childValue) && (childValue = childValue[0]);

	            sum += childValue;
	        });

	        var thisValue = dataNode.value;
	        if (zrUtil.isArray(thisValue)) {
	            thisValue = thisValue[0];
	        }

	        if (thisValue == null || isNaN(thisValue)) {
	            thisValue = sum;
	        }
	        // Value should not less than 0.
	        if (thisValue < 0) {
	            thisValue = 0;
	        }

	        zrUtil.isArray(dataNode.value)
	            ? (dataNode.value[0] = thisValue)
	            : (dataNode.value = thisValue);
	    }
@param {string} [path]
@return {module:echarts/model/Model}