LeetCode105 從前序遍歷和中序遍歷構造二叉樹
阿新 • • 發佈:2020-07-29
根據一棵樹的前序遍歷與中序遍歷構造二叉樹。
遞迴,根據前序遍歷當前有效區域第一個,即為當前根節點;找到中序遍歷中它的位置,左側為左節點,右側為右節點。
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10class Solution { 11 public: 12 TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) { 13 int len=preorder.size(); 14 //preorder.size()!=inorder.size(), set global variable 15 return recursive_build(preorder,0,len-1,inorder,0,len-1); 16 } 1718 TreeNode* recursive_build(vector<int>& preorder, int startpre, int endpre, vector<int>& inorder, int startin, int endin){ 19 if(startpre>endpre) 20 return nullptr; 21 if(startpre==endpre) 22 return new TreeNode(preorder[startpre]);23 int rootval=preorder[startpre]; 24 int posin=startin; 25 while(inorder[posin]!=rootval && posin<=endin) 26 ++posin; 27 //posin>endin, set g_variable 28 TreeNode* curNode=new TreeNode(rootval); 29 int leftlen=posin-startin; 30 curNode->left=recursive_build(preorder,startpre+1,startpre+leftlen,inorder,startin,posin-1); 31 curNode->right=recursive_build(preorder,startpre+leftlen+1,endpre,inorder,posin+1,endin); 32 return curNode; 33 } 34 };