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     }

 

posted @ 2020-08-16 14:38  请叫我小小兽  阅读(153)  评论(0编辑  收藏  举报