1. 程式人生 > 其它 >leetcode-105. 從前序與中序遍歷序列構造二叉樹

leetcode-105. 從前序與中序遍歷序列構造二叉樹

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 
*/ class Solution { public: unordered_map<int,int> in_map; vector<int> pre_order; TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.size()==0) return NULL; cout<<"flag"<<endl; for(int
i = 0; i < inorder.size(); i++){ in_map[inorder[i]] = i; pre_order.push_back(preorder[i]); } return recur(0,0,inorder.size()-1); } // pre:在先序遍歷中的跟節點的下標。 // left:在中序遍歷中的左邊界 // right:在中序遍歷中的右邊界 TreeNode* recur(int pre,int left,int right){
if(left>right) return NULL; int mid = in_map[pre_order[pre]]; // cout<<"mid"<<mid<<endl; // cout<<"pre_order[pre]:"<<pre_order[pre]<<endl; TreeNode* root = new TreeNode(pre_order[pre]); root->left = recur(pre+1,left,mid-1); root->right = recur(pre+(mid-left)+1,mid+1,right); return root; } };