线索二叉树的先序、中序、后序

2023-10-27

线索二叉树的先序、中序、后序

/*
	Name: 线索二叉树 
	Copyright: 
	Author: lkm 
	Date: 30/09/21 14:50
	Description: 
*/

#include<stdio.h> 
#include<malloc.h>
typedef struct node{
	char data;	//数据元素 
	struct node *lchild,*rchild;	//左、右孩子指针 
	int ltag,rtag;	//左、右线索标志 
}BiTreeNode,*BiTree;
//输入abc###def###h##
void CreateBiTree(BiTree &T){
	char c;
	BiTree pre=NULL;
	scanf("%c",&c);
	if(c=='#')
	{
		T=NULL;
	}
	else{
		T=(BiTree)malloc(sizeof(BiTreeNode)); 
		T->data=c;
		T->lchild=T->rchild=NULL;
		T->ltag=T->rtag=0;
		CreateBiTree(T->lchild);
		CreateBiTree(T->rchild);
	}
}
//先序二叉树 NLR
void PreOrder(BiTree T){
	BiTree pre;
	if(T){				
		pre=(BiTree)malloc(sizeof(BiTreeNode));		
		if(T->lchild==NULL){
			T->lchild=pre;
			T->ltag=1;
		}
		if(pre!=NULL&&pre->rchild==NULL){
			pre->rchild=T;
			pre->rtag=1;
		}
		pre=T;
		printf("%c",T->data);//访问根结点
		if(T->ltag==0) {
			PreOrder(T->lchild);//线索化左子树
		}
		if(T->rtag==0){
			PreOrder(T->rchild);//线索化右子树 
		}	
	}
}
//中序二叉树 LNR
void InOrder (BiTree T){
	BiTree pre;
	if(T){	
		if(T->rtag==0){
			PreOrder(T->lchild);//线索化左子树 
		}		
		pre=(BiTree)malloc(sizeof(BiTreeNode));		
		if(T->lchild==NULL){
			T->lchild=pre;
			T->ltag=1;
		}
		if(pre!=NULL&&pre->rchild==NULL){
			pre->rchild=T;
			pre->rtag=1;
		}		
		pre=T;
		printf("%c",T->data);//访问根结点	
		if(T->rtag==0){
			PreOrder(T->rchild);//线索化右子树 
		}	 	
	}
}
//后序二叉树 LRN
void PostOrder(BiTree T) {
BiTree pre;
	if(T){	
		if(T->rtag==0){
			PreOrder(T->lchild);//线索化左子树 
		}
		if(T->rtag==0){
			PreOrder(T->rchild);//线索化右子树 
		}		
		pre=(BiTree)malloc(sizeof(BiTreeNode));		
		if(T->lchild==NULL){
			T->lchild=pre;
			T->ltag=1;
		}
		if(pre!=NULL&&pre->rchild==NULL){
			pre->rchild=T;
			pre->rtag=1;
		}		
		pre=T;		
		printf("%c",T->data);//访问根结点	
	}
}
int main(){
	BiTree T;
	CreateBiTree(T);
	printf("先序线索二叉树:"); 
	PreOrder(T);
	printf("\n");
	printf("中序线索二叉树:");
	InOrder(T);
	printf("\n");
	printf("后序线索二叉树:");
	PostOrder(T);
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

线索二叉树的先序、中序、后序 的相关文章

随机推荐

  • TCP传输过程详解——三次握手、四次挥手

    TCP 3 1 三次握手 重点 3 2 四次挥手 重点 3 3 通过序列号与确认应答提高可靠性 3 4 重发超时的确定 3 5 以段为单位发送数据 3 6 利用窗口控制提高速度 3 7 滑动窗口控制 3 8 窗口控制中的重发控制 TCP T
  • ICCV19 (Oral)

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 本文作者 洪晓鹏 https zhuanlan zhihu com p 127956794 本文已由原作者授权 不得擅自二次转载 Zhiheng Ma Xing Wei
  • 苹果发布iOS16正式版,各机型升级建议

    文章目录 前言 升级注意事项 iOS 16增加了哪些功能 1 锁屏界面大改动 2 全新专注模式 3 查看Wi Fi密码 4面容ID横屏解锁 5 电量百分比 6 支持任天堂Switch手柄 7 键盘输入震动 8 隐藏相册支持加密 9 清理重复
  • Linux 信号(三) —— 强大的sigaction

    在Linux中 对于信号的收发有着两组函数 1 入门版 发送函数 int kill pid t pid int sig 接收函数 sighandler t signal int signum sighandler t handler 这组函
  • MyBatis进阶版

    本文有点难 目录 1 一些区分 1 1参数占位符 和 1 1 1SQL注入 1 1 2like查询 1 2resultType和resultMap 2 映射查询 2 1一对一表映射 2 2一对多表映射 3 动态SQL 3 1标签 3 2标签
  • esp32使用fft算法显示音乐频谱

    演示参考下方视频 源码链接在视频末尾获取 点击查看视频 介绍 本项目使用esp32s3 ifd4 2 声音传感器以及tft显示屏构成 使用快速傅里叶变换算法处理采集到的音频数据 fft处理后的数据使用lvgl显示在tft屏幕上 电路图 源码
  • SpringBoot MongoDB批量删除指定日期前的文件

    SpringBoot MongoDB批量删除指定日期前的文件 Query query new Query LocalDateTime localDateTime LocalDateTime of 2021 6 1 0 0 0 query a
  • 《动手学深度学习 Pytorch版》 2.1 数据操作

    2 1 1 数据操作 注意此处 import 的不是 pytorch 而是 torch Torch 是采用 lua 语言实现的 从某种程度上说 PyTorch 是 Torch 的 Python 版本 当然还是有部分差别的 import to
  • python学生分布_python统计函数库scipy.stats的用法解析

    背景 总结统计工作中几个常用用法在python统计函数库scipy stats的使用范例 正态分布 以正态分布的常见需求为例了解scipy stats的基本使用方法 1 生成服从指定分布的随机数 norm rvs通过loc和scale参数可
  • CDUA 图形学 Texture Reference 实验

    下面是对Texture Reference的实验 代码改自 CUDA C PROGRAMMING GUIDE PG 02829 001 v10 0 October 2018 p54 因为这里比较贴近计算机图形学 故移到图形学中去 版权所有
  • Java基础面试题一:请说说抽象类和接口的区别?

    1 抽象类实例 abstract class person public String name 可以有普通成员变量 public static String sex 可以有静态成员变量 public static void eat 可以有
  • 用GDB跟踪观察共享库函数的地址翻译过程

    用GDB跟踪观察共享库函数的地址翻译过程 用GDB观察共享库函数的翻译过程 研究了一下共享库函数是怎样加载到当前进程中的 开始共享库函数地址放在GOT中 第一次调用时 ld将其翻译成函数在程序空间的真实地址 用GDB跟踪了一下整个过程 记录
  • 宋浩概率论笔记(二)随机变量

    本章节内容较多 是概率论与数理统计中最为重要的章节 对于概率密度和分布函数的理解与计算要牢牢掌握 才能在后期的学习中更得心应手
  • 安装docker后启动报错Failed to set version to docker-desktop: exit code: -1

    背景 我想用PC Windows 上的VS code连接远程服务器 Linux 内的docker容器 这样能用编辑器editor修改文件 更加方便 VS code的插件remote container能达到这一目的 按照它的指示guide
  • 性能自动化测试

    性能自动化测试 1 为什么要做性能测试 2 什么是性能测试 3 性能测试分类 1 压力测试 2 负载测试 3 配置测试 4 基准测试 5 并发测试 6 容量测试 7 稳定性测试 4 什么时候需要进行何种性能测试 5 性能测试常见指标 1 响
  • Iterable的常见方法以及含义

    1 Iterable Iterable是java集合接口的顶级接口之一 这是这个接口中的iterator方法 用来返回一个实现了Iterator接口的对象 1 1Iterator接口中的方法 1 1 1forEachRemaining方法
  • MultipartFile.transferTo(dest) 报找不到文件

    MultipartFile transferTo dest 报找不到文件 今天使用transferTo这个方法进行上传文件的使用发现了一些路径的一些问题 查找了一下记录问题所在 前端上传网页 使用的是单文件上传的方式
  • C++调用C函数

    前言 以前见到extern C 这样的语句 只是简单地知道跟外部链接有关 但是没有深刻理解它的意思 首先 为什么要使用extern C 修饰符 C 调用其它语言的函数 由于编译器生成函数的机制不一样 所以需要经过特殊处理 才可以调用 调用C
  • SQL 四种语言基本操作

    SQL Structured Query Language 结构化查询语言 SQL主要4个部分 数据定义类SQL DDL DATE DEFINITION LANGUAGE CREATE 创建数据库及其对象 表 索引 视图 存储过程 函数和触
  • 线索二叉树的先序、中序、后序

    线索二叉树的先序 中序 后序 Name 线索二叉树 Copyright Author lkm Date 30 09 21 14 50 Description include