C++根据二叉树的前序遍历序列和中序遍历序列,重建该二叉树,并返回根节点

C++根据二叉树的前序遍历序列和中序遍历序列,重建该二叉树,并返回根节点,第1张

//重建二叉树
//根据二叉树的前序遍历序列和中序遍历序列,重建该二叉树,并返回根节点
//两个遍历都没有重复的元素
/step 1:先根据前序遍历第一个点建立根节点。
step 2:然后遍历中序遍历找到根节点在数组中的位置。
step 3:再按照子树的节点数将两个遍历的序列分割成子数组,将子数组送入函数建立子树。
step 4:直到子树的序列长度为0,结束递归
/

TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
	int n = pre.size();
	int m = vin.size();
	if (n == 0 || m == 0)return NULL;
	TreeNode* root = new TreeNode(pre[0]);
	for (int i = 0; i < vin.size(); i++) {
		if (pre[0] == vin[i]) {
			vector<int> leftpre(begin(pre) + 1, begin(pre) + i + 1);
			vector<int> leftvin(begin(vin), begin(vin) + i);
			root->left = reConstructBinaryTree(leftpre, leftvin);
			vector<int> rightpre(begin(pre) + i + 1, end(pre));
			vector<int> rightvin(begin(vin) + i + 1, end(vin));
			root->right = reConstructBinaryTree(rightpre, rightvin);
			break;
		}
	}
	return root;
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/786067.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-04
下一篇2022-05-04

发表评论

登录后才能评论

评论列表(0条)

    保存