作者:小卢
专栏:《Leetcode》
喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》
105. 从前序与中序遍历序列构造二叉树
题目描述:
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。
示例:
思路:
利用previ去变量前序数组找到根的位置,然后再去中序数组里面找到根,分割左右子树区间
然后begin和end在中序数组去分割左右子树,然后利用递归构建树
代码:
1. class Solution { 2. public: 3. TreeNode* _buildTree(vector<int>& preorder, vector<int>& inorder,int&previ,int begin,int end) { 4. if(begin>end) 5. return nullptr; 6. TreeNode*root=new TreeNode(preorder[previ]); 7. int rooti=0; 8. while(preorder[previ]!=inorder[rooti]) 9. { 10. rooti++; 11. } 12. previ++; 13. root->left=_buildTree(preorder,inorder,previ,begin,rooti-1); 14. root->right=_buildTree(preorder,inorder,previ,rooti+1,end); 15. return root; 16. } 17. TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { 18. int i=0; 19. return _buildTree(preorder,inorder,i,0,inorder.size()-1); 20. } 21. 22. };