根据前序序列和中序序列重建二叉树

本文介绍了如何根据前序遍历和中序遍历的序列重建二叉树,基本思路是确定根节点,并寻找左右子树的分割点。在递归过程中需处理边界情况,如子树序列为空。同时,文章提到了C++中的vector操作技巧,如通过find()查找元素位置,以及使用构造函数初始化节点。最后,文中记录了一个编译错误及其原因,强调了遵循题目要求的重要性。
摘要由CSDN通过智能技术生成

1 基本思路:前序遍历的第一个节点为根节点,找到根节点在中序遍历中的位置i。然后分别找到前序遍历中左子树对应的部分,前序遍历中右子树对应的部分,中序遍历中左子树对应的部分,中序遍历中右子树对应的部分,分别用四个数组来存储。然后分别对左子树、右子树递归调用,传入的参数也对应发生改变。
2 代码实现:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
     TreeNode* reConstructBinaryTree(vector<int>pre,vector<int>in) {
     //考虑边界情况:由于pre和in的size总是相同
     int inlen=in.size();
     if(inlen==0)
         return NULL;
     
     //先序遍历序列的首元素是根节点
     TreeNode * head=new TreeNode(pre[0]);
     //查找根节点在中序遍历序列中的位置,pos用来存储这个位置
     int pos=find(in.begin(),in.end(),pre[0])-in.begin();  
     //用left_pre存储前序序列中的左子树,left_in存储中序序列中的左子树
     //用right_pre存储前序序列中的右子树,right_in存储中序序列中的右子树
     vector <int> left_pre,left_in,right_pre,right_in;
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值