题目
给出二叉树的前序遍历与中序遍历结果,重建该二叉树。
思路
由于前序遍历的第一个数字是根节点,将中序遍历分为左右子树两个部分。接下来就递归,将左子树和右子树的序列分离出来,然后调用递归函数。
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; }
原文地址:https://www.cnblogs.com/shiganquan/p/9281782.html
时间: 2024-11-09 21:17:48