leetcode-105. 從前序與中序遍歷序列構造二叉樹
阿新 • • 發佈:2021-07-21
/** * 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(inti = 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; } };