Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:帝国cms建站系统 编辑:程序博客网 时间:2024/06/06 00:47

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

Note:
You may assume that duplicates do not exist in the tree.

 

#include<iostream>#include<vector>#include<map>#include<algorithm>using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}};TreeNode *CreatNode(vector<int>::iterator pre_begin, vector<int>::iterator pre_end, vector<int>::iterator ino_begin, vector<int>::iterator ino_end){if (pre_begin == pre_end)return NULL;TreeNode* curnode = new TreeNode(*pre_begin);auto iter = find(ino_begin, ino_end, *pre_begin);int lenLeftTree = distance(ino_begin, iter);curnode->left  = CreatNode( pre_begin + 1, pre_begin +1+ lenLeftTree, ino_begin, iter);curnode->right = CreatNode( pre_begin + 1+lenLeftTree, pre_end, iter+1,ino_end );return curnode;}TreeNode *buildTree(vector<int> &preorder, vector<int> &inorder) {if (preorder.empty())return NULL;TreeNode* root = new TreeNode(0);root = CreatNode(preorder.begin(), preorder.end(), inorder.begin(), inorder.end());return root;}


 

0 0