剑指offer7重建二叉树
Posted shiganquan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer7重建二叉树相关的知识,希望对你有一定的参考价值。
题目
给出二叉树的前序遍历与中序遍历结果,重建该二叉树。
思路
由于前序遍历的第一个数字是根节点,将中序遍历分为左右子树两个部分。接下来就递归,将左子树和右子树的序列分离出来,然后调用递归函数。
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; }
以上是关于剑指offer7重建二叉树的主要内容,如果未能解决你的问题,请参考以下文章