已知一颗二叉树的前序遍历和中序遍历,要求重建出该二叉树;
根据前序遍历和中序遍历的特征,前序遍历的顺序为根左右,中序为左根右,那么在前序遍历中找到的根节点,在中序遍历中,左边为其左子树,右边为其右子树,由此可知使用递归的方法不断的寻找子序列的左子树右子树并重组,即可完成二叉树的还原,具体实现代码如下:
class Solution { public: TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) { if(pre.empty()) return NULL; vector<int>Lpre,Rpre; vector<int>Lvin,Rvin; for(int i =0;i<pre.size();i++){ if(vin[i]=pre[0]){ int index=i; break; } } for(int j =0;j<index;j++){ Lpre.push_back(pre[j]); Lvin.push_back(vin[j]); } for(int k=0;k>index+1;k++){ Rpre.push_back(pre[k]); Rvin.push_back(vin[k]); } TreeNode *root=new TreeNode(pre[0]); root->left=reConstructBinaryTree(Lpre,Lvin); root->right=reConstructBinaryTree(Rpre,Rvin); return root; } };
浙公网安备 33010602011771号