leetcode 44:construct-binary-tree-from-preorder-and-inorder
题目描述
给出一棵树的前序遍历和中序遍历,请构造这颗二叉树
注意:
可以假设树中不存在重复的节点
题目分析:
这道题和leetcode 43:construct-binary-tree-from-inorder-and-postorder简直一模一样的,只是后续遍历换成了前序遍历,前序遍历的特点就是前序遍历的第一个节点就是根节点,其他逻辑跟43题一模一样。
代码如下:
1 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { 2 if(inorder.size() == 0) 3 return NULL; 4 TreeNode* head = new TreeNode(preorder[0]); 5 int index = 0; 6 for(int i = 0;i < inorder.size();i++) 7 { 8 if(inorder[i] == preorder[0]) 9 { 10 index = i; 11 break; 12 } 13 } 14 vector<int> left_preOrder,right_preOrder,left_inOrder,right_inOrder; 15 for(int i = 0;i < index;i++) 16 { 17 left_preOrder.push_back(preorder[i + 1]); 18 left_inOrder.push_back(inorder[i]); 19 } 20 for(int i = index + 1;i <inorder.size();i++) 21 { 22 right_inOrder.push_back(inorder[i]); 23 right_preOrder.push_back(preorder[i]); 24 } 25 26 head->left = buildTree(left_preOrder,left_inOrder); 27 head->right = buildTree(right_preOrder, right_inOrder); 28 return head; 29 }