根据前中序列构造二叉树

力扣题目

图示分析

代码实现

C语言代码实现:

cpp 复制代码
//构造树
struct TreeNode* buildTree(int* p, int pSize, int* in, int inSize){
    return CreatTree(p,in,0,0,pSize-1);
}
struct TreeNode*CreatTree(int*p,int*in,int index,int left,int right)
{
    //在left到right的范围内构造树,p为前序数组,in为中序数组,index为待构建根在前序p中下标
    if(left>right)
    	return NULL;
    
    //创建根节点
    struct TreeNode*root=(struct TreeNode*)malloc(sizeof(struct TreeNode));
    root->val=p[index];
    root->left=NULL;
    root->right=NULL;
    
    //找到根节点在中序in中的位置pos,找pos的目的一是为了找到右孩子,而是为了划分构建返回
    int pos=left;
    while(left<right&&p[index]!=in[pos])
    {
        pos++;
    }
    
    root->left=CreatTree(p,in,index+1,left,pos-1);//连接左孩子,并构造左侧区域子树
    root->right=CreatTree(p,in,pos+1-left+index,pos+1,right);//连接右孩子,并构造右侧区域子树
    
    return root;
}
相关推荐
AI视觉网奇6 小时前
Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr
开发语言·c++·算法
ghie90906 小时前
ECG波形检查与分析系统
算法
智者知已应修善业6 小时前
【输入两个数字,判断两数相乘是否等于各自逆序数相乘】2023-10-24
c语言·c++·经验分享·笔记·算法·1024程序员节
Shingmc36 小时前
【Linux】进程控制
linux·服务器·算法
阿正的梦工坊7 小时前
DreamGym:通过经验合成实现代理学习的可扩展化
人工智能·算法·大模型·llm
小武~7 小时前
Leetcode 每日一题C 语言版 -- 45 jump game ii
c语言·算法·leetcode
行云流水6267 小时前
前端树形结构实现勾选,半勾选,取消勾选。
前端·算法
laocooon5238578868 小时前
一个C项目实现框架
c语言·算法
c#上位机9 小时前
halcon图像增强——图像取反
图像处理·算法·c#·halcon
zheyutao9 小时前
割点和桥
算法·图论