C++输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/aaa958099161/article/details/89973260

题目描述
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍
历的结果中都不含重复的数字。例如输入前序遍历序列{ 1,2,4,7,3,5,6,8 }和中序遍历序列
{ 4,7,2,1,5,3,8,6 },则重建二叉树并返回。


class Solution {
public:
	TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
		int data_size = pre.size();
		if (data_size == 0)
		{
			return NULL;
		}
		vector<int> pre_left, pre_rigth, vin_left, vin_right;//准备递归参数
		int head_value = pre.front();
		TreeNode* t = new TreeNode(head_value);
		int i = 0; //i中序遍历分界点
		for (;i<vin.size();i++)
		{
			if (head_value==vin[i])
			{
				break;
			}
		}
		for (int j=1;j<pre.size();j++)
		{
			if (j<=i)
			{
				pre_left.push_back(pre[j]) ;
			}
			else
			{
				pre_rigth.push_back(pre[j]);

			}
		}

		for (int j = 0; j < vin.size(); j++)
		{
			if (j < i)
			{
				vin_left.push_back(vin[j]);
			}
			else if(j>i)
			{
				vin_right.push_back(vin[j]);

			}
		}

		t->left = reConstructBinaryTree(pre_left, vin_left);
		t->right = reConstructBinaryTree(pre_rigth, vin_right);
		return t;
	}
};

测试: 

int main()
{
	Solution *s = new Solution();
	vector<int> v1 = { 1,2,4,7,3,5,6,8 };
	vector<int> v2 = { 4,7,2,1,5,3,8,6 };
	s->reConstructBinaryTree(v1, v2);

	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/aaa958099161/article/details/89973260