先序中序建立二叉树的递归算法
其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序
列,紧跟着是右子树先序遍历序列,故根节点已可从先序序列中分离。在中序序列中找
到 确定的根节点,根据中序遍历特性,在巾序序列中,根节点前面的序列即为左子树
的中序遍历序列,根节点后面的即为右子树的中序遍历序列。由左右子树的中序序列长
度,在该二叉树的先序序列中即可找到左右子树的先序序列的分界点,从而得到二叉树
的左右子树的先序序列。
递归实现:
递归函数输入:二叉树的先序序列和中序序列;返回-、建好的二叉树的根节点。
算法思想:
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
先序中序建立二叉树的递归算法相关推荐
- 【IT笔试面试题整理】给定二叉树先序中序,建立二叉树的递归算法
[试题描述]: 给定二叉树先序中序,建立二叉树的递归算法 其先序序列的第一个元素为根节点,接下来即为其左子树先序遍历序列,紧跟着是右子树先序遍历序列,固根节点已可从先序序列中分离.在中序序列中找到 ...
- 【笔记】二叉树递归算法和非递归算法的实现 先序/中序/后续遍历 打印结点以及顺序数 构造二叉树
递归先序遍历和中序遍历 先序: void preorder(bnode *t){if(t!=NULL){ visit(t);preorder(t->lchild); preorder(t-> ...
- [算法] 已知前序和后序遍历,建立二叉树
结点结构 typedef struct Node{char data;struct Node *left;struct Node *right; }Node; 已知前序和后序遍历,建立二叉树(不唯一, ...
- 二叉树的构造(前序+中序)---(后序 + 中序)
二叉树的构造(前序+中序)-(后序 + 中序) 思路:要对前序+中序(后序+中序)的构建树的动态过程要了解,思路比较简单,在了解了这个过程之后,理解下面代码就容易了. 过程 参考图: 前序 + 中序: ...
- 利用先序遍历输入法建立二叉树
题目:假设二叉树结点的数据为字符,即 struct TreeNode { char Data; struct TreeNode * Left; struct TreeNode * Right; }; ...
- 二叉树--先序中序遍历求后序遍历
先序遍历:根 左 右 中序遍历:左 根 右 后序遍历:左 右 根 我们可以先从先序遍历中找到根节点,由于知道了根节点那么可以依靠中序遍历找到左子树,右子树.这样再去先序遍历中找到左子树的根节点,然后再 ...
- 【图论】【二叉树】以先序字符串方式建立二叉树
问题 I(1186): [基础算法]以先序字符串方式建立二叉树 时间限制: 1 Sec 内存限制: 64 MB 题目描述 输入一个二叉树的先序串,输出其后序遍历结果.如果结点的子树为空,先序串的对应 ...
- 二叉树前序中序后续线索树_二叉树的先序,中序,后序遍历以及线索二叉树的遍历...
二叉树的先序,中序,后序遍历以及线索二叉树的遍历 (2008-05-04 17:52:49) 标签: 杂谈 C++ 二叉树的先序,中序,后序遍历以及线索二叉树的遍历 头文件 //*********** ...
- C/C++面试题—重建二叉树【前序 + 中序- 重建二叉树 和 后序 + 中序 - 重建二叉树】
题目介绍 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字. 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{ ...
- 二叉树前序中序,后序中序,公共最近祖先的实现
二叉树前序中序,后序中序,公共最近祖先的实现 注释中详细介绍了算法,故不再赘述. 无论是前序还是后序,一个节点的左子树和右子树都是可以看做是分开的,有一定规律可循,故可用递归进行实现. #includ ...
最新文章
- autoware中的交通灯识别(八)
- Python基础总结(3)
- 路径处理库pathlib使用详解
- 21_Android中常见对话框,光传感器,通过重力感应器编写出指南针应用,帧动画,通过Jav代码的方式编写补间动画,通过XML的方式编写补间动画
- 火狐浏览器如何禁止网站发消息 火狐浏览器禁止网站发消息的方法
- dockerfile 创建Jenkins镜像
- 阿里OSS对象存储,实现图片上传进度显示ProgressListener;
- JavaScript函数的4种调用方法详解
- visual studio怎么让button一直生效_民用建设工程设计合同怎么生效
- Linux源码安装包快速升级方法
- (转)《C++ Qt 编程视频教程》(C++ Qt Programming)[MP4]
- systemtap分析软raid io拆分问题
- Python爬虫实战之五:requests-re多页爬取链家成都地区租房市场信息
- 10 Kafka集群与运维
- 二、Excel大纲—基础篇
- 【设计模式从青铜到王者】第二篇:UML类图与面向对象编程
- Java枚举深入理解以及HttpStatus类的使用
- 2019.1.21【NOIP提高组】模拟B组 JZOJ 4208 线段树什么的最讨厌了
- python发html邮件_在python中如何制作发送HTML格式的邮件?
- 机器学习之二:回归分析
热门文章
- php 把查询数据转json格式,php将从数据库查询到的数据转化为json格式,并写入json文件中...
- oracle 二进制运算符,Oracle UNION运算符
- mysql cluster常见问题访问_MySQL Cluster的常见问题
- python 打开本地程序发生异常_Python中的异常处理
- linux下keytool生成证书_Keytool生成https证书步骤0014
- 【题解】(排序) —— POJ 0811:牛的选举
- Ubuntu 20.04 安装CUDA11.1 和cudnn 8.0.5
- Java构造函数执行顺序
- hihocoder编程练习赛91:相邻字符串
- 语义分割之OCR的评判标准