二叉树以中序为数据, 先序或者后序为根, 创建二叉树

#include<iostream>
using namespace std;

struct Tree{

	int v;
	Tree *left, *right;
};

Tree *create_node(int v){

	Tree *node = new Tree;
	node->v = v;
	node->left = node->right = NULL;
	return node;
}
// 中序  后序
Tree *mid_post(int *mid, int *post, int N){

	int pos = 0;
	for( pos = 0; pos<N; pos++){
		if(mid[pos] == post[N-1])
			break;
	}
	if(pos == N){
		for(int i = 0 ;i<N; i++)
			cout<<mid[i]<<" ";
		cout<<"   ";
		for(int i = 0 ;i<N; i++)
			cout<<post[i]<<" ";
		cout<<"没有与"+post[N-1]<<"相等价的值"<<endl;
	}
	Tree *node = create_node(post[N-1]);
	// 左树存在
	if(pos > 0){
		node->left = mid_post(mid, post, pos);
	}
	// 右树存在
	if(N-pos-1 > 0){
		node->right = mid_post(mid+pos+1, post+pos, N-pos-1);
	}
	return node;
}
// 中序  先序
Tree *mid_pre(int *mid, int *pre, int N){


	int pos = 0;
	for( ; pos<N; pos++){
		if(mid[pos] == pre[0])
			break;
	}
	if(pos == N){

		cout<<"mid中没有与"+ pre[0] << "匹配的项" << endl;
		return NULL;
	}
	Tree *node = create_node(mid[pos]);
	if(pos > 0){
		node->left = mid_pre(mid, pre+1, pos);
	}
	if(N - pos - 1 > 0){
		node->right = mid_pre(mid+pos+1, pre+pos+1, N-pos-1);
	}
	return node;
}
// 中序 输出
void mid_order(Tree *node){

	if(node != NULL){

		if(node->left != NULL)
			mid_order(node->left);
		cout<<node->v<<" ";
		if(node->right != NULL)
			mid_order(node->right);
	}
}
// 先序 输出
void pre_order(Tree *node){
	if(node != NULL){

		cout<<node->v<<" ";
		if(node->left != NULL)
			pre_order(node->left);
		if(node->right != NULL)
			pre_order(node->right);
	}
}
// 后序 输出
void post_order(Tree *node){

	if(node != NULL){

		if(node->left !=  NULL)
			post_order(node->left);
		if(node->right != NULL)
			post_order(node->right);
		cout<<node->v<<" ";
	}
}

int main(){

	int len = 7;
	//int mid[] = {3, 2, 1, 4, 5, 7 , 6};
	//int post[] = {3, 1, 2, 5, 6, 7, 4};
	//Tree *root = mid_post(mid, post, len);
	//mid_order(root);
	int mid[] = {1, 2, 3, 4, 5, 6, 7};
	int pre[] = {4, 2, 1, 3, 5, 7, 6 };
	Tree *root = mid_pre(mid, pre, len);
	post_order(root);
	cin>>len;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38598257/article/details/81873035