其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序
列,紧跟着是右子树先序遍历序列,故根节点已可从先序序列中分离。在中序序列中找
到 确定的根节点,根据中序遍历特性,在巾序序列中,根节点前面的序列即为左子树
的中序遍历序列,根节点后面的即为右子树的中序遍历序列。由左右子树的中序序列长
度,在该二叉树的先序序列中即可找到左右子树的先序序列的分界点,从而得到二叉树
的左右子树的先序序列。
递归实现: 
递归函数输入:二叉树的先序序列和中序序列;返回-、建好的二叉树的根节点。
算法思想:
1)若二叉树空,返回空;
2)若不空,取先序序列第一个元素,建立根节点;
3)在中序序列中查找根节点,以此确定左右子树的先序序列和中序序列;
4)递归调用自己,建左子树;
5)递归调用自己,建右子树。

void createBiTree(linkshu &root, const char*  pre , const char* in,int len){int k;//左子树长度const char* temp;if(len<=0){root=NULL;return;}root=(linkshu)malloc(sizeof(struct shu));root->data=*pre;for(temp=in;temp<in+len;temp++){if(*temp==*pre)break;}

k=temp-in;createBiTree(root->lchild,pre+1,in,k);createBiTree(root->rchild,pre+1+k,temp+1,len-1-k);

}

转载于:https://www.cnblogs.com/wonderKK/archive/2011/11/07/2240355.html

先序中序建立二叉树的递归算法相关推荐

  1. 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法

    [试题描述]:  给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...

  2. 【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树

    递归先序遍历和中序遍历 先序: void preorder(bnode *t){if(t!=NULL){ visit(t);preorder(t->lchild); preorder(t-> ...

  3. [算法] 已知前序和后序遍历,建立二叉树

    结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...

  4. 二叉树的构造(前序+中序)---(后序 + 中序)

    二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...

  5. 利用先序遍历输入法建立二叉树

    题目:假设二叉树结点的数据为字符,即 struct TreeNode { char Data; struct TreeNode * Left; struct TreeNode * Right; }; ...

  6. 二叉树--先序中序遍历求后序遍历

    先序遍历:根 左 右 中序遍历:左 根 右 后序遍历:左 右 根 我们可以先从先序遍历中找到根节点,由于知道了根节点那么可以依靠中序遍历找到左子树,右子树.这样再去先序遍历中找到左子树的根节点,然后再 ...

  7. 【图论】【二叉树】以先序字符串方式建立二叉树

    问题 I(1186): [基础算法]以先序字符串方式建立二叉树 时间限制: 1 Sec  内存限制: 64 MB 题目描述 输入一个二叉树的先序串,输出其后序遍历结果.如果结点的子树为空,先序串的对应 ...

  8. 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...

    二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...

  9. C/C++面试题—重建二叉树【前序 + 中序- 重建二叉树 和 后序 + 中序 - 重建二叉树】

    题目介绍 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...

  10. 二叉树前序中序,后序中序,公共最近祖先的实现

    二叉树前序中序,后序中序,公共最近祖先的实现 注释中详细介绍了算法,故不再赘述. 无论是前序还是后序,一个节点的左子树和右子树都是可以看做是分开的,有一定规律可循,故可用递归进行实现. #includ ...

最新文章

  1. autoware中的交通灯识别(八)
  2. Python基础总结(3)
  3. 路径处理库pathlib使用详解
  4. 21_Android中常见对话框,光传感器,通过重力感应器编写出指南针应用,帧动画,通过Jav代码的方式编写补间动画,通过XML的方式编写补间动画
  5. 火狐浏览器如何禁止网站发消息 火狐浏览器禁止网站发消息的方法
  6. dockerfile 创建Jenkins镜像
  7. 阿里OSS对象存储,实现图片上传进度显示ProgressListener;
  8. JavaScript函数的4种调用方法详解
  9. visual studio怎么让button一直生效_民用建设工程设计合同怎么生效
  10. Linux源码安装包快速升级方法
  11. (转)《C++ Qt 编程视频教程》(C++ Qt Programming)[MP4]
  12. systemtap分析软raid io拆分问题
  13. Python爬虫实战之五:requests-re多页爬取链家成都地区租房市场信息
  14. 10 Kafka集群与运维
  15. 二、Excel大纲—基础篇
  16. 【设计模式从青铜到王者】第二篇:UML类图与面向对象编程
  17. Java枚举深入理解以及HttpStatus类的使用
  18. 2019.1.21【NOIP提高组】模拟B组 JZOJ 4208 线段树什么的最讨厌了
  19. python发html邮件_在python中如何制作发送HTML格式的邮件?
  20. 机器学习之二:回归分析

热门文章

  1. php 把查询数据转json格式,php将从数据库查询到的数据转化为json格式,并写入json文件中...
  2. oracle 二进制运算符,Oracle UNION运算符
  3. mysql cluster常见问题访问_MySQL Cluster的常见问题
  4. python 打开本地程序发生异常_Python中的异常处理
  5. linux下keytool生成证书_Keytool生成https证书步骤0014
  6. 【题解】(排序) —— POJ 0811:牛的选举
  7. Ubuntu 20.04 安装CUDA11.1 和cudnn 8.0.5
  8. Java构造函数执行顺序
  9. hihocoder编程练习赛91:相邻字符串
  10. 语义分割之OCR的评判标准