TreeNode *buildBinaryTree(int beginIn, int beginPost, int len){ if(len <= 0){ return NULL; } TreeNode *root = new TreeNode(post[beginPost + len - 1]); int rootPos = findRoot(post[beginPost + len - 1], beginIn, len); if(rootPos == -1){ return NULL; } int newLenLeft = rootPos; int newLenRight = len - newLenLeft - 1; root->left = buildBinaryTree(beginIn, beginPost, newLenLeft); root->right = buildBinaryTree(beginIn + rootPos + 1, beginPost + newLenLeft, newLenRight); return root; }
TreeNode *buildBinaryTree(int beginIn, int beginPre, int len){ if(len <= 0){ return NULL; } int rootValue = pre[beginPre]; TreeNode *root = new TreeNode(rootValue); int rootPos = findRoot(rootValue, beginIn, len); if(rootPos == -1){ return NULL; } int newLenLeft = rootPos; int newLenRight = len - newLenLeft - 1; root->left = buildBinaryTree(beginIn, beginPre + 1, newLenLeft); root->right = buildBinaryTree(beginIn + newLenLeft + 1, beginPre + newLenLeft + 1, newLenRight); return root; }
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) { if(inorder.size() == 0 || preorder.size() == 0 || inorder.size() != preorder.size()){ return NULL; } in = inorder; pre = preorder; return buildBinaryTree(0, 0, in.size()); }
int main(int argc, char const *argv[]) { int val; scanf("%d", &val); tree = getNFillNode(val); pin_node q, p; while(1) { scanf("%d", &val); buildBinaryTree(tree, val); p = NULL; } printf("%d\n", tree->val); return 0; }