JSFiddle - React, Tailwind, and code Playground

by twobin

HTML

<!doctype html>
<body>
    <div id="test"></div>
</body>
</html>

JavaScript

//资料在最深一层,找到一个最佳的打开顺序,使得数字和最大
(function(window){
	var 
	//初始化最大值
	max = 0, 
	//记录遍历结点的值
	levelPath = [],
	
	finalKeyPathStr = '',
	
	ShortPathVal = window.ShortPathVal= function(dataArr){
		trvaseGraph(createGraph(dataArr),max);
		return finalKeyPathStr;
	}
	
	//邻接表的形式创建无向图
	function createGraph(arr){
		var 
		//头结点
		head={},
		//父结点的数组,每个父节点都包括左/右子结点
		lastLevelObjects=[];
		for(var i=0;i<arr.length;i++){
			var  newArr= arr[i].split(","),
			levelObjects=[];
			for(var j=0;j<newArr.length;j++){
				var o={};
				o.value = newArr[j];
				o.level = i+1;
				levelObjects.push(o);
				if(j===0 && i===0){
					//设置头结点
					head=o;
					break;
				}
				if(j-1>=0)
				//设置右边的子结点
				lastLevelObjects[j-1].rightObject=o;
				if(j<lastLevelObjects.length)
				//设置左边的子结点
				lastLevelObjects[j].leftObject=o;
			}
			//重置lastLevelObjects为对象(当前的level属性的值)数组
			lastLevelObjects=levelObjects;
		}
		return head;
	}
	//递归遍历图找出求得最大值的路线
	function trvaseGraph(start,currentValue){
		//保证levelPath的长度小于当前结点的level属性值,避免多余的“脏”数据
		while(levelPath.length>=parseInt(start.level)) levelPath.pop();
		
		levelPath.push(start.value);
		
		if(start.leftObject==null && start.rightObject==null){ 
			//在当前遍历中遍历到最后一层子结点的value和值
			currentValue +=parseInt(start.value);
			if(max<currentValue){
				var route="";
				
				//重置max
				max=currentValue;
				for(var i=levelPath.length-2;i>=0;i--){
					route=levelPath[i]+'-->'+route;
				}
				route+=levelPath[levelPath.length-1];
				finalKeyPathStr="Path:"+route+"  MaxValue:"+max;
			}
			return;
		}
		//在当前遍历中未遍历到最后一层子结点的value和值
		currentValue+=parseInt(start.value);
		if(start.leftObject!=null){
			//遍历左边子结点
			trvaseGraph(start.leftObject,currentValue);
		}
		
		if(start.rightObject!=null){
			//遍历右边子结点
			trvaseGraph(start.rightObject,currentValue);
		}
	}
	
})(window)
var dataArr =["188",
              "188,112",
              "105,105,194",
              "142,166,191,129",
              "171,172,134,127,127",
             ...