1. 程式人生 > >【劍指offer】7、重建二叉樹

【劍指offer】7、重建二叉樹

nbsp treenode truct 遞歸函數 tar end || 部分 遍歷

題目

給出二叉樹的前序遍歷與中序遍歷結果,重建該二叉樹。

思路

由於前序遍歷的第一個數字是根節點,將中序遍歷分為左右子樹兩個部分。接下來就遞歸,將左子樹和右子樹的序列分離出來,然後調用遞歸函數。

TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {
  int length = pre.size() - 1;
  TreeNode* root = ConstructCore(pre, 0, length , vin, 0, length);
  return root;
}
    
TreeNode
* ConstructCore(vector<int> pre, int pre_start, int pre_end, vector<int> vin, int vin_start, int vin_end){   if ((pre_start > pre_end) || (vin_start > vin_end))     return nullptr;   TreeNode* res = new TreeNode(pre[pre_start]);   for (int i = vin_start; i <= vin_end; i++)   {     if
(vin[i] == pre[pre_start]){       res->left = ConstructCore(pre, pre_start + 1, pre_start + i - vin_start, vin, vin_start, i - 1);       res->right = ConstructCore(pre, pre_start + i + 1 - vin_start, pre_end, vin, i + 1, vin_end);     }   }   return res; }

【劍指offer】7、重建二叉樹