C++通过后序遍历序列以及前序遍历序列创建二叉树

#include<iostream>
using namespace std;
typedef char TElemType;

typedef struct node {
	struct node*lchild=NULL, *rchild=NULL;
	TElemType data;
}TNode;

void CreateTreeSub(TNode*&BT, TElemType frontOrder[],int frontStart,int frontEnd ,TElemType InOrder[],int inStart,int inEnd)
{
	if (frontStart <= frontEnd)
	{
		BT = new TNode;
		BT->data = frontOrder[frontStart];
		int i;
		for ( i = inStart;i < inEnd;i++)
			if (InOrder[i] == frontOrder[frontStart])
				break;
		CreateTreeSub(BT->rchild, frontOrder, frontStart + 1 + i - inStart, frontEnd, InOrder, i + 1, inEnd);
		CreateTreeSub(BT->lchild, frontOrder, frontStart + 1, frontStart + i - inStart, InOrder, inStart, i - 1);
	}
}

void CreateTree(TNode*&root,TElemType frontOrder[],int m ,TElemType InOrder[],int n)
{
	int frontStart = 0;
	int frontEnd = m;
	int inStart = 0;
	int inEnd = n;
	CreateTreeSub(root,frontOrder,frontStart,frontEnd-1, InOrder,inStart,inEnd-1);
}

void dispTree(TNode*root)
{
	if (root != NULL)
	{
		cout << root->data;
		dispTree(root->lchild);
		dispTree(root->rchild);
	}
}

int main()
{
	TNode*root=NULL;
	char frontOrder[] = "ABCDEFG";
	char inOrder[] = "CBDAFEG";
	CreateTree(root,frontOrder,sizeof(frontOrder),inOrder,sizeof(inOrder));
	dispTree(root);
	system("pause");

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值