【模板】【建树】前序+中序 后序+中序

本文介绍如何利用先序遍历(根-左-右)和中序遍历(左-根-右)或后序遍历(左-右-根)的数据,通过递归方法在C++中创建二叉树。通过实例代码展示了CreateByPrio和CreateByPost函数的用法,适用于树结构的构建与解析。
摘要由CSDN通过智能技术生成

建树:已知一棵树的 前序+中序后序+中序 即可以递归的建立一棵树。

#include<iostream>
#include<cstdlib>
using namespace std;

const int N = 100;
int n;
int mind[N], prio[N], post[N];

struct Tree {
	int data;
	Tree* lchild, * rchild;
};

//先序 + 中序
Tree* CreateByPrio(int x,int y,int z)// x:子树中序起点 y:子树先序起点 z:子树长度
{
	if (z == 0) return NULL;
	Tree* root = new Tree;
	root->data = prio[y];
	int len;
	for (int i = x; i < x + z; i++)
	{
		if (mind[i] == prio[y]) {
			len = i - x;
			break;
		}
	}
	root->lchild = CreateByPrio(x, y + 1, len);
	root->rchild = CreateByPrio(x + len + 1, y + len + 1, z - len - 1);
	return root;
}

//后序 + 中序
Tree* CreateByPost(int x, int y, int z)// x:子树中序起点 y:子树后序起点 z:子树长度
{
	if (z == 0) return NULL;
	Tree* root = new Tree;
	root->data = post[y + z - 1];
	int len;
	for (int i = x; i < x + z; i++)
	{
		if (mind[i] == post[y + x - 1])
		{
			len = i - x;
			break;
		}
	}
	root->lchild = CreateByPost(x, y, len);
	root->rchild = CreateByPost(x + len + 1, y + len, z - len - 1);
	return root;
}

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> mind[i];
	for (int i = 0; i < n; i++)
		cin >> prio[i];
	return 0;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sophon、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值