二叉树之已知前序遍历、中序遍历求二叉树

本文介绍如何根据给定的二叉树前序遍历和中序遍历来重构二叉树。首先,通过前序遍历找到根节点,然后在中序遍历中找到根节点的位置,以此划分左右子树。接着,递归地对左右子树进行相同操作,直至构建完整棵二叉树。最后,展示了具体的解题思路和代码实现。
摘要由CSDN通过智能技术生成

以上一篇的二叉树为例https://blog.csdn.net/u012093557/article/details/106496635
在这里插入图片描述
这个二叉树的前序、中序分别如下所示,
1, 2,3,4,5,6,7,8, 9,10,11,
4,3,2,6,5,8,7, 1, 10,9,11,

解题思路:前序遍历是根-》左-》右,那么第一个数一定是根节点,这里1就是根节点。中序遍历左-》根-》右,那么1拿到中序遍历就可以分割左、右子树,中序遍历左子树:4,3,2,6,5,8,7,右子树:10,9,11,。且可按照长度,在前序遍历结果中,可找到左子树前序遍历2,3,4,5,6,7,8,,右子树9,10,11,。分割子树完毕,子树是否可以再按照以上分析继续解析,此时如果可以,那么就形成了递归。接下来看一下代码实现

TwoTree* calATree(vector<int> preorderList,vector<int> middleOrderList)
{
   
    // 前序的首位是根,根再分割中序可以找到左子树,右子树
    if ((preorderList.size() != middleOrderList.size()) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值