Leetcode:105. 從前序與中序遍歷序列構造二叉樹&106. 從中序與後序遍歷序列構造二叉樹html
這道題是經典的模板題啦~node
用前序中序後序遍歷結果建樹的模板請跳轉到:前中後序創建樹或者直接歷遍post
直接默寫!!!ui
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> preOrder,inOrder; TreeNode* built(int root,int start,int end,TreeNode* tree){ if(start>end) return NULL; if(tree==NULL) tree=new TreeNode(preOrder[root]); int index=start; while(inOrder[index]!=preOrder[root]) index++; tree->left=built(root+1,start,index-1,tree->left); tree->right=built(root+index-start+1,index+1,end,tree->right); return tree; } TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { preOrder=preorder,inOrder=inorder; TreeNode* tree=NULL; tree=built(0,0,preOrder.size()-1,tree); return tree; } };
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> inOrder,postOrder; TreeNode* build(int root,int start,int end,TreeNode* tree){ if(start>end) return NULL; if(tree==NULL) tree=new TreeNode(postOrder[root]); int index=start; while(postOrder[root]!=inOrder[index]) index++; tree->left=build(root-end+index-1,start,index-1,tree->left); tree->right=build(root-1,index+1,end,tree->right); return tree; } TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) { inOrder=inorder,postOrder=postorder; TreeNode* tree=NULL; tree=build(inOrder.size()-1,0,inOrder.size()-1,tree); return tree; } };