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'); } } }
TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { int len1 = inorder.size(); TreeNode * head = buildT(inorder, 0, len1, postorder, 0); return head; }