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());
    }
Exemplo n.º 4
0
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;
}