Leetcode #105 Construct Binary Tree from Preorder and Inorder Traversal
2015-08-08 03:40
274 查看
Given preorder and inorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree
Difficulty:Medium
Note:
You may assume that duplicates do not exist in the tree
Difficulty:Medium
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* build(vector<int>& preorder, vector<int>& inorder,int pStart,int pEnd,int iStart, int iEnd){ TreeNode* root; if(pEnd<pStart) return NULL; int mid = preorder[pStart]; root = new TreeNode(mid); if(pEnd == pStart) return root; int p_l_s,p_l_e,p_r_s,p_r_e; int i_l_s,i_l_e,i_r_s,i_r_e; i_l_s = iStart; i_l_e = iStart; while(inorder[i_l_e]!=mid) i_l_e++; i_l_e--; p_l_s = pStart + 1; p_l_e = p_l_s + (i_l_e - i_l_s); p_r_s = p_l_e+1; p_r_e = pEnd; i_r_s = i_l_e + 2; i_r_e = iEnd; root->left = build(preorder,inorder,p_l_s,p_l_e,i_l_s,i_l_e); root->right = build(preorder,inorder,p_r_s,p_r_e,i_r_s,i_r_e); return root; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.size()==0) return NULL; return build(preorder,inorder,0,preorder.size()-1,0,preorder.size()-1); } };
相关文章推荐
- 一定用好自己的应届毕业生身份
- 已知二叉树的后序和中序排列,求先序排列再线索化的问题(笔试常考)
- 一道题Wrong Answer之后该何去何从?
- Leetcode解题笔记-Rotate Array
- Codeforces 548B Mike and Fun
- 系统节拍的使用
- iPhone开发入门系列2(iOS8+Swift版)备忘录APP学习01
- 犀牛——第7章 7.3稀疏数组
- python的win32操作
- python的一些图像操作
- hdu 3874 Necklace (树状数组+离线操作)
- HDOJ 2317 Nasty Hacks
- Android入门——Handler机制
- hdu 3333 Turing Tree (树状数组+离线处理+离散化)
- post 提交数据
- 黑马程序员——数组转换(二进制-八进制-十六进制)-第6天
- OC_NSUseDefault
- 黑马程序员_java_面向对象总结
- 黑马程序员_java_集合总结(下)
- 黑马程序员_java_集合总结(上)