예제 #1
0
파일: tmp8.cpp 프로젝트: wz125/wz125.course
int main()
{
	int caseNum;	//??????
	int originNum, nodeNum;	//?????????,?????????
	int buff;	//??????
	BinTreeNode *binBuff;	//????
	BinTreeNode binTree[MAX_NUM];
	cin >> caseNum;
	for(int i = 0; i < caseNum; i++)
	{
		BinTreeNode leftTemp;	//?????
		BinTreeNode rightTemp;	//?????
		priority_queue<BinTreeNode> binTreeQueue;
		cin >> originNum;
		nodeNum = 0;
		for(int j = 0; j < originNum; j++)
		{
			cin >> buff;
			binBuff = new BinTreeNode(buff);
			binTreeQueue.push(*binBuff);
			delete binBuff;
		}
		for(int j = 0; j < originNum - 1; j++)
		{
			leftTemp = binTreeQueue.top();
			binTreeQueue.pop();
			rightTemp = binTreeQueue.top();
			binTreeQueue.pop();
			binTree[nodeNum++] = leftTemp;
			binTree[nodeNum++] = rightTemp;	//??????????????????
			binBuff = new BinTreeNode(leftTemp.GetData() + rightTemp.GetData(),
										&(binTree[nodeNum - 2]), &(binTree[nodeNum - 1]));
			binTreeQueue.push(*binBuff);
			if(j == originNum - 2)
				binTree[nodeNum++] = binTreeQueue.top();
			delete binBuff;
		}
		qsort(binTree, nodeNum, sizeof(BinTreeNode), BinTreeNodeCompare);
		BinTreeNode *root = &binTree[nodeNum - 1];
		cout << WeighCalculate(root, 0) << endl;
	}
	return 0;
}
예제 #2
0
파일: tmp8.cpp 프로젝트: wz125/wz125.course
bool BinTreeNode::operator==(BinTreeNode x)
{
	if(data != x.GetData())
		return false;
	else if(leftChild != x.GetLeftChild())
		return false;
	else if(rightChild != x.GetRightChild())
		return false;
	return true;
}
예제 #3
0
파일: tmp8.cpp 프로젝트: wz125/wz125.course
bool operator<(BinTreeNode x, BinTreeNode y)
{
	return x.GetData() > y.GetData();
}
예제 #4
0
파일: tmp8.cpp 프로젝트: wz125/wz125.course
bool BinTreeNode::operator<(BinTreeNode x)
{
	return data > x.GetData();	//???????,?????????????
}