function Tree(hostModel, levelOptions) {
	        /**
	         * @type {module:echarts/data/Tree~TreeNode}
	         * @readOnly
	         */
	        this.root;

	        /**
	         * @type {module:echarts/data/List}
	         * @readOnly
	         */
	        this.data;

	        /**
	         * Index of each item is the same as the raw index of coresponding list item.
	         * @private
	         * @type {Array.<module:echarts/data/Tree~TreeNode}
	         */
	        this._nodes = [];

	        /**
	         * @private
	         * @readOnly
	         * @type {module:echarts/model/Model}
	         */
	        this.hostModel = hostModel;

	        /**
	         * @private
	         * @readOnly
	         * @type {Array.<module:echarts/model/Model}
	         */
	        this.levelModels = zrUtil.map(levelOptions || [], function (levelDefine) {
	            return new Model(levelDefine, hostModel, hostModel.ecModel);
	        });
	    }
@param {Object} opt
@param {module:echarts/data/List} opt.mainData
@param {Object} [opt.struct] For example, instance of Graph or Tree.
@param {string} [opt.structAttr] designation: list[structAttr] = struct;
@param {Object} [opt.datas] {dataType: data},
                like: {node: nodeList, edge: edgeList}.
                Should contain mainData.
@param {Object} [opt.datasAttr] {dataType: attr},
                designation: struct[datasAttr[dataType]] = list;