依据先序、中序序列建立二叉树
时间:2021-07-12
本文章向大家介绍依据先序、中序序列建立二叉树,主要包括依据先序、中序序列建立二叉树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
include <stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef int TElemtype;
typedef struct BiTNode
{
TElemtype Data;
int IfVisited;
struct BiTNode* Lchild, * Rchild;
}BiTNode;
typedef BiTNode* BiTree;
int array_length;
int Search(TElemtype ps, TElemtype* in)
{
for (int i = 0; i < array_length; i++) {
if (in[i] == ps)return i;
}
return -1;
}
void Pre_And_IN(BiTree& T, TElemtype* pre, TElemtype* in, TElemtype ps, TElemtype is, int n)//先序中序建树
{
if (n == 0) T = NULL;
else {
int k = Search(pre[ps], in);
if (k == -1) {
T = NULL;
return;
}
else {
T = (BiTree)malloc(sizeof(BiTNode));
T->Data = in[k];
if (k - is == 0) T->Lchild = NULL;
else Pre_And_IN(T->Lchild, pre, in,ps+1,is,k-is );
if (n - 1 - k + is == 0)T->Rchild = NULL;
else Pre_And_IN(T->Rchild, pre, in,ps+k-is+1,k+1,n-1-k+is );
}
}
}
int main()
{
BiTree N[9];
for (int i = 0; i < 9; i++) { N[i] = CreateNode(i); N[i]->IfVisited = 0; }
N[0]->Lchild = N[1]; N[0]->Rchild = N[2];
N[1]->Lchild = N[3];
N[2]->Lchild = N[4]; N[2]->Rchild = N[5];
N[3]->Rchild = N[6];
N[6]->Lchild = N[7]; N[6]->Rchild = N[8];
int pre[7] = { 23,54,2,6,8,9,13 };
int in[7] = { 2,54,6,23,8,13,9 };
array_length = 7;
BiTree T1, T2;
Pre_And_IN(T1, pre, in, 0, 0, 7);
PostOrder(T1, PrintTree); printf("\n");
}
原文地址:https://www.cnblogs.com/tzp-empty-hya/p/15004374.html
- 【更正】“给自定义控件(Web Control)添加事件的几种方法”有一个不太准确的地方。
- 在数据库上实现类似铁路售票锁票功能
- Android代码判断手机是否已root方法学习
- 实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以
- Android中Context用法详解学习
- 【自然框架】之 “表单控件”与“实体类”
- Android数据存储实现的5大方式
- Android实现图片异步加载操作
- (PDF.NET框架实例讲解)将存储过程映射为实体类
- 【开源】QuickPager ASP.NET2.0分页控件——使用示例、基本应用和查询功能
- 移花接木:当泛型方法遇上抽象类----我的“内存数据库”诞生记
- Android扫描多媒体文件剖析
- Android的进程与线程使用总结
- Android在WebView中加载HTML并实现交互
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何取消rxjs Observable的订阅
- 使用Angular rxjs打印鼠标点击事件的x坐标之和
- js变量提升 和函数提升
- JavaWeb——HTTP请求协议及request对象使用方法一点通与request登录实战案例(含BeanUtils类的使用)
- redis学习(二十一)
- Linux下查看文件和文件夹大小
- 使用Angular rxjs进行优雅限流
- Nginx自动重定向
- dotnet OpenXML SDK 形状的翻转与旋转
- C# dotnet 使用 AsyncEx 库的 AsyncLock 异步锁
- bt5.9手动开心
- 项目中多个文件引入同一份公共样式less文件导致编译打包后有多份样式
- Angular rxjs Observable的异步行为
- Angular rxjs里自定义operator的使用
- tensorflow 生成指定大小的赋值0的张量 np.zeros 在TF中对应的语句 生成全0张量