4. 重建二叉树

题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{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 len = vin.size();
		if(len <= 0)
			return NULL;
		vector<int> left_pre, right_pre, left_vin, right_vin;
		TreeNode* head = new TreeNode(pre[0]);//定义指向根节点的指针
		int gen = 0;//定义中序遍历序列中的根节点的位置为gen
		for(int i = 0; i< len; i ++){
			if(vin[i] == pre[0]){
				gen = i;
				break;
			}
		}
		for(int i = 0; i < gen; i ++){
			left_pre.push_back(pre[i+1]);
			left_vin.push_back(vin[i]);
		}
		for(int i = gen + 1; i < len, i ++){
			right_pre.push_back(pre[i]);
			right_vin.push_back(vin[i]);
		}
		//递归地重建左子树和右子树
		head->left = reConstructBinaryTree(left_pre,left_vin);
		head->right = reConstructBinaryTree(right_pre,right_vin);
		return head;
	}
};
/*  TreeNode* head = new TreeNode(pre[0]);对这一句的解释:TreeNode* head 是定义一个指针head,
head指向的数据的类型为TreeNode类型;new TreeNode(pre[0]) 是为结点pre[0]开辟一个新空间,将这
个新空间的地址赋给head。 总结起来就是定义了一个head指针,指向根节点pre[0],指针存储着根节点
的地址。*/
			

猜你喜欢

转载自blog.csdn.net/weixin_39605679/article/details/80864331