scrapy 筆記2.0
阿新 • • 發佈:2020-10-07
劍指 Offer 07. 重建二叉樹
遞迴1
class Solution { public: TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { if(preorder.size()==0) return NULL; if(preorder.size()==1) { TreeNode* root=new TreeNode(preorder[0]); return root; } TreeNode* root=new TreeNode(preorder[0]); int index; for(int i=0;i<inorder.size();i++) { if(inorder[i]==preorder[0]) { index=i; break; } } vector<int> leftPre(preorder.begin()+1,preorder.begin()+1+index); vector<int> leftIn(inorder.begin(),inorder.begin()+index); vector<int> rightPre(preorder.begin()+1+index,preorder.end()); vector<int> rightIn(inorder.begin()+index+1,inorder.end()); root->left=buildTree(leftPre,leftIn); root->right=buildTree(rightPre,rightIn); return root; } };
改進:遞迴2
不直接輸入vector進行遞迴,而是通過索引進行遞迴
class Solution { public: map<int,int> dic; vector<int> preOrder; TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { for(int i=0;i<inorder.size();i++) { dic[inorder[i]]=i; } for(int i=0;i<preorder.size();i++) { preOrder.push_back(preorder[i]); } return recur(0,0,inorder.size()-1); } TreeNode* recur(int pre_root,int in_left,int in_right) { if(in_left>in_right) return NULL; TreeNode* root= new TreeNode(preOrder[pre_root]); int index=dic[preOrder[pre_root]]; root->left=recur(pre_root+1,in_left,index-1); root->right=recur(pre_root+1+index-in_left,1+index,in_right); return root; } };