#include<iostream>
#include"CommenDefine.h"
#include<vector>
using namespace std;
/*输入某二叉树的前序遍历和中序遍历的结果,
请重建出该二叉树。假设输入的前序遍历和中序遍历
的结果中都不含重复的数字。例如输入前序遍历序列
{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},
则重建二叉树并返回
思路:递归*/
struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in)
{
if(0 == pre.size())
return NULL;
vector<int> preleft,preright;
vector<int> inleft,inright;
int root = pre[0];
TreeNode *head = new TreeNode(root);
int flag = 0;
for(unsigned int i = 0;i < in.size();i++)
{
if(root == in[i])
{
flag = i;
break;
}
}
for(unsigned int i = 0;i < flag;i++)
{
inleft.push_back(in[i]);
preleft.push_back(pre[i+1]);
}
for(unsigned int i = flag+1;i < in.size();i++)
{
inright.push_back(in[i]);
preright.push_back(pre[i]);
}
head->left = reConstructBinaryTree(preleft,inleft);
head->right = reConstructBinaryTree(preright,inright);
return head;
}
算法练习四:重建二叉树
最新推荐文章于 2020-08-08 19:27:40 发布