leetcode:二叉树之Construct Binary Tree from Preorder and Inorder Traversal

来源:互联网 发布:windows账户登录不了 编辑:程序博客网 时间:2024/06/05 09:29

leetcode:二叉树之Construct Binary Tree from Preorder and Inorder Traversal

题目:

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

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

即,根据给定的二叉树的前序遍历与中序遍历,构建二叉树

例如:一未知的二叉树的前序遍历为:[1,2,3,4,5,6],其中序遍历为:[3,2,4,1,5,6]

由前序遍历与中序遍历我们可以得到二叉树为:


我们根据上图可以得到其后序遍历为:[3,4,2,6,5,1],我们利用其后序遍历来验证二叉树是否构建成功。

c++实现:

#include <iostream>#include <vector>using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) { }};template<typename InputIterator>TreeNode* build(InputIterator pre_first, InputIterator pre_last,InputIterator in_first, InputIterator in_last);TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder){return build(begin(preorder), end(preorder),begin(inorder), end(inorder));}template<typename InputIterator>TreeNode* build(InputIterator pre_first, InputIterator pre_last,InputIterator in_first, InputIterator in_last){if (pre_first == pre_last)return NULL;if (in_first == in_last) return NULL;auto root = new TreeNode(*pre_first);auto inRootPos = find(in_first, in_last, *pre_first);auto leftSize = distance(in_first, inRootPos);root->left = build(next(pre_first), next(pre_first,leftSize + 1), in_first, next(in_first, leftSize));root->right = build(next(pre_first, leftSize + 1), pre_last,next(inRootPos), in_last);return root;}void postorderTraverse(TreeNode* &T){   if(T)//当结点不为空的时候执行{    postorderTraverse(T->left);//  postorderTraverse(T->right);  cout<<T->val;}  else cout<<"";  }int main(){int preorder[6]={1,2,3,4,5,6}; int inorder[6]={3,2,4,1,5,6};    vector<int>pre(preorder,preorder+6);vector<int>in(inorder,inorder+6);TreeNode* Tree(0);Tree=buildTree(pre, in);postorderTraverse(Tree);cout<<endl;    return 0;}
测试结果;




0 0
原创粉丝点击