【劍指offer】7、重建二叉樹
阿新 • • 發佈:2018-07-09
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、重建二叉樹