重建二叉树


题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序序列和中序序列中都不含重复的数字。
例如输入前序{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}
重建二叉树如图所示(省略)。二叉树节点的定义如下:


struct BinaryTreeNode
{
int mValue;
BinaryTreeNode* mLeftChild;
BinaryTreeNode* mRightChild;
};


#include <iostream>
using namespace std;

struct BinaryTreeNode
{
	char mValue;
	BinaryTreeNode * mLeftChild;
	BinaryTreeNode * mRightChild;
};


//我写的版本
BinaryTreeNode* Construct0(char * preOrder , char * inOrder, int length)
{
	if (length <= 0)
		return NULL;

	BinaryTreeNode* root = new BinaryTreeNode();
	root->mValue = preOrder[0];
	root->mLeftChild = NULL;
	root->mRightChild = NULL;

	int i = 0;
	for (i; i < length && preOrder[0] != inOrder[i]; ++i);

	int leftLength = i;
	int rightLength = length - leftLength - 1;

	root->mLeftChild = Construct0(preOrder + 1, inOrder, leftLength);
	root->mRightChild = Construct0(preOrder + 1 + leftLength,  inOrder + 1 + leftLength, rightLength);

	return root;
}

void PostOrder(BinaryTreeNode * root)
{
	if (root)
	{

		PostOrder(root->mLeftChild);
		PostOrder(root->mRightChild);
		cout << root->mValue << " ";
	}
}


int main()
{
	BinaryTreeNode * root = NULL;
	root = Construct0("12473568","47215386", 8);
	PostOrder(root);

	return 0;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值