public int maxPathAsRoot2(treeNode curRoot,
			HashMap<treeNode, Integer> node_notRootMax,
			HashMap<treeNode, Integer> node_asRootMax) {
		this.running_time_asRoot2++;
		int curMax = -10000;

		if (node_asRootMax.containsKey(curRoot))
			return node_asRootMax.get(curRoot);

		if (curRoot.leftLeaf == null && curRoot.rightLeaf == null) {
			curMax = curRoot.value;
		} else if (curRoot.leftLeaf == null && curRoot.rightLeaf != null) {
			curMax = maxPathNotRoot2(curRoot.rightLeaf, node_notRootMax)
					+ curRoot.value;
		} else if (curRoot.leftLeaf != null && curRoot.rightLeaf == null) {
			curMax = maxPathNotRoot2(curRoot.leftLeaf, node_notRootMax)
					+ curRoot.value;
		} else {
			curMax = maxPathNotRoot2(curRoot.leftLeaf, node_notRootMax)
					+ maxPathNotRoot2(curRoot.rightLeaf, node_notRootMax)
					+ curRoot.value;
		}

		node_asRootMax.put(curRoot, curMax);
		return curMax;
	}