您的位置:首页 > 其它

LeetCode:Construct Binary Tree from Preorder and Inorder Traversal

2014-09-12 20:06 513 查看
题目:

Given preorder and inorder traversal of a tree, construct the binary tree.

代码如下:

/*根据前序遍历的序列和中序遍历的序列求出整个树*/
#include <iostream>
#include <exception>
#include <vector>
#include <stdio.h>
using namespace std;
struct TreeNode
{
TreeNode* left;
TreeNode* right;
int val;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};

class Solution {
public:
TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {
int prelength = preorder.size();
int inlength = inorder.size();
vector<int>::iterator itr = preorder.begin();
TreeNode *root;
if(prelength == inlength)
{
if(prelength == 0)
return NULL;
if(prelength == 1 && preorder[0]==inorder[0]){
root = new TreeNode(0);
root->val = preorder[0];
return root;
}
}
else
throw exception();

root = buildNode(preorder, inorder, 0,prelength-1,0,inlength-1);
return root;

}
void PrintTree(TreeNode *node)
{
if(!node)
return;
else
{
if(node ->left)
PrintTree(node->left);
if(node ->right)
PrintTree(node->right);
cout << node -> val <<'\t';
}
}
TreeNode *buildNode(vector<int> &preorder,vector<int> &inorder,int pre_start,int pre_end,int in_start,int in_end)
{
TreeNode *root = new TreeNode(0);
//在前序遍历中首先找到根节点
root->val = preorder[pre_start];
//再在中序遍历中找到根节点

int root_index = 0;
for(int i = in_start; i <= in_end; i++)
{
if(inorder[i] == root->val)
{
root_index = i;
if(root_index == in_start)
root->left = NULL;
else
{
int length = root_index - in_start;
root->left = buildNode(preorder,inorder,pre_start+1,pre_start+length,in_start,root_index-1);
}
if(root_index == in_end)
root->right = NULL;
else
{
int length = in_end - root_index;
root->right = buildNode(preorder,inorder,pre_end-length+1,pre_end,root_index+1,in_end);
}
return root;
}
}
}
};
void Test1()
{
const int length = 8;
int pre[length] = {1,2,4,7,3,5,6,8};
int in[length] = {4,7,2,1,5,3,8,6};
vector<int> preorder,inorder;
for(int i = 0; i < length; i++)
{
preorder.push_back(pre[i]);
inorder.push_back(in[i]);
}
Solution sol;
TreeNode *node = NULL;
node = sol.buildTree(preorder,inorder);
cout << "The post_order is :";
sol.PrintTree(node);
cout << endl;
return;
}
int main()
{
Test1();
system("PAUSE");
return 0;
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐