Exemple #1
0
 TreeNode * buildT(vector<int>& inorder, int i_start, int i_len, vector<int>& postorder, int p_start)
 {
     if(!i_len)
         return NULL;
     TreeNode * new_one = new TreeNode(postorder[p_start+i_len-1]);
     int mid;
     for(mid=i_start; mid<i_start+i_len; mid++)
         if(postorder[p_start+i_len-1] == inorder[mid])
             break;
     int left_len = mid - i_start;
     new_one->left = buildT(inorder, i_start, left_len, postorder, p_start);
     new_one->right = buildT(inorder, mid+1, i_len -left_len-1, postorder, p_start+left_len);
     return new_one;
 }
Message* Parser::parseMessage(uint64_t& reference, uint64_t& match) {
	char test = '\0';
	if (!binaryData.get(test)) return NULL;
	binaryData.get(test);
	uint32_t size = test - '\0';
	binaryData.read(buffer, size);
	printProgress(size + 2);
	switch (*buffer) {
	case 'R':
		return buildSD(buffer);
		break;
	case 'A':
	case 'F':
		return buildAO(buffer, reference);
		break;
	case 'E':
		return buildOE(buffer, reference, match);
		break;
	case 'C':
		return buildOEWP(buffer, reference, match);
		break;
	case 'D':
		return buildOD(buffer, reference);
		break;
	case 'U':
		return buildOR(buffer, reference);
		break;
	case 'P':
	case 'Q':
		return buildT(buffer, match);
		break;
	case 'B':
		return buildBT(buffer, match);
		break;
	default: {
		//cout << "skipping non-relevant message, type: " << *buffer << endl; 
		return new Message('\0');
	}
	}
}
Exemple #3
0
 TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
     int len1 = inorder.size();
     TreeNode * head = buildT(inorder, 0, len1, postorder, 0);
     return head;
 }