线索化二叉树(代码 、分析 、汇编)

目录:

    • 代码:
    • 分析:
    • 汇编:

代码:

BTree.h
BTree.c
二叉树(多路平衡搜索树)

SeqList.h
SeqList.c
顺序表

main.c

#include <stdio.h>
#include <stdlib.h>
#include "BTree.h"
#include "SeqList.h"struct Node//树节点
{BTreeNode header;char v;
};void printf_data(BTreeNode* node)
{if( node != NULL ){printf("%c", ((struct Node*)node)->v);}
}
//定义将树的所有节点设置成可以向左一直访问节点
//只是从左开始向右,依次将未尾节点的在子节点指向另一个节点,实现可以向左一直访问
//并不是将整个树结构改变
void thread_via_left(BTreeNode* root, BTreeNode** pp)
{//节点不为空与节点指针不为空//注意:这里其实第一次后只会判断第一个条件,因为pp一直有指向节点指针变量,只是指向的//节点指针变量指向的节点会为空。这是在里面判断if( (root != NULL) && (pp != NULL) ){if( *pp != NULL )//当前这个节点指针不为空{(*pp)->left = root;//将这个指针指向的节点指针的节点的左子节点设为当前传来的节点*pp = NULL;//当前这个指针指向的节点指针的节点的左子节点已经有指向,将这个指针设空,不再指向这个节点}if( root->left == NULL )//如果传来的节点的左子节点为空{*pp = root;//将指向节点指针指向的节点等于传来的节点,表示下次传来的节点将作为这个节点的左子节点}thread_via_left(root->left, pp);thread_via_left(root->right, pp);}
}void thread_via_list(BTreeNode* root, SeqList* list)//将树子节点全部插入顺序表
{if( (root != NULL) && (list != NULL) ){SeqList_Insert(list, (SeqListNode*)root, SeqList_Length(list));thread_via_list(root->left, list);thread_via_list(root->right, list);}
}int main(int argc, char *argv[])
{BTree* tree = BTree_Create();//创建一个树BTreeNode* current = NULL;BTreeNode* p = NULL;SeqList* list = NULL;//顺序表指针int i = 0;struct Node n1 = {{NULL, NULL}, 'A'};struct Node n2 = {{NULL, NULL}, 'B'};struct Node n3 = {{NULL, NULL}, 'C'};struct Node n4 = {{NULL, NULL}, 'D'};struct Node n5 = {{NULL, NULL}, 'E'};struct Node n6 = {{NULL, NULL}, 'F'};BTree_Insert(tree, (BTreeNode*)&n1, 0, 0, 0);BTree_Insert(tree, (BTreeNode*)&n2, 0x00, 1, 0);BTree_Insert(tree, (BTreeNode*)&n3, 0x01, 1, 0);BTree_Insert(tree, (BTreeNode*)&n4, 0x00, 2, 0);BTree_Insert(tree, (BTreeNode*)&n5, 0x02, 2, 0);BTree_Insert(tree, (BTreeNode*)&n6, 0x02, 3, 0);printf("Full Tree: \n");BTree_Display(tree, printf_data, 4, '-');printf("Thread via List:\n");list = SeqList_Create(BTree_Count(tree));//创建顺序表容量是树的节点数量thread_via_list(BTree_Root(tree), list);//调用函数将树节点插入到表中for(i=0; i<SeqList_Length(list); i++){printf("%c, ", ((struct Node*)SeqList_Get(list, i))->v);//输出:ABDEFC}printf("\n");printf("Thread via Left:\n");current = BTree_Root(tree);//取得根节点thread_via_left(current, &p);while( current != NULL ){printf("%c, ", ((struct Node*)current)->v);current = current->left;//输出:ABDEFC}printf("\n");BTree_Destroy(tree);getchar();return 0;
}

分析:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

汇编:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/379164.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python---寻找给定序列中相差最小的两个数字

编写函数&#xff0c;寻找给定序列中相差最小的两个数字 def getTwoClosestElements(arr):#先进行排序&#xff0c;使得相邻元素最接近#相差最小的元素必然相邻seq sorted(arr)#先进行排序dif float(inf)#无穷大#遍历所有元素&#xff0c;两两比较&#xff0c;比较相邻元素的…

ubuntu 无线 共享 上网

配置DHCP服务器 使连接到此AP的电脑 自动获取IP 1. 安装软件包&#xff1a;sudo apt-get install dhcp3-server2. 修改/etc/default/dhcp3-server配置文件INTERFACES"eth1" //eth1为无线网卡的名字3. 修改/etc/dhcp3/dhcpd.conf配置文件option domain-name-servers …

Java StringBuilder getChars()方法与示例

StringBuilder类的getChars()方法 (StringBuilder Class getChars() method) getChars() method is available in java.lang package. getChars()方法在java.lang包中可用。 getChars() method is used to copy all the characters from the given arguments (int src_st, int …

Python---利用蒙特.卡罗方法计算圆周率近似值

利用蒙特.卡罗方法计算圆周率近似值 什么是蒙特.卡罗方法&#xff1f; 答&#xff1a;蒙特卡罗方法是一种计算方法。原理是通过大量随机样本&#xff0c;去了解一个系统&#xff0c;进而得到所要计算的值。 正方形内部有一个相切的圆&#xff0c;它们的面积之比是π/4。 这里假…

不具有继承关系的Delegate如何进行类型转换?

- 引自:Artech 我们知道对于两个不具有继承关系的两个类型&#xff0c;如果没有为它们定义转换器&#xff0c;两这之间的类型转换是不允许的&#xff0c;Delegate也是如此。但是有时候我们却希望“兼容”的两种Delegate类型能够进行转换&#xff0c;比较典型的就是表示事件的De…

Java属性loadFromXML()方法与示例

属性类loadFromXML()方法 (Properties Class loadFromXML() method) loadFromXML() method is available in java.util package. loadFromXML()方法在java.util包中可用。 loadFromXML() method is used to load all the properties denoted by the XML file on the given inpu…

FLV封装格式的分析

FLV封装格式的分析&#xff0c;各种详细的参数比较多没有详细解释&#xff0c;这是总体的格式分布。详细的参数说明可以参照文档。 以flv格式内封装的音频流是aac、视频流是h264分析&#xff1a; flv文件tag部分截图&#xff1a;可以看到音频TAG、视频TAG是交错存储的

《计算机基础复习》===数据库技术基础

数据库系统三级结构&#xff1a; 数据库系统一般划分为三个抽象级&#xff1a;用户级、概念级、物理级。 1&#xff09;用户级数据库&#xff1a;对应于外模式。它是用户看到和使用的数据库&#xff0c;又称用户视图&#xff1b;用户级数据库主要由外部记录组成&#xff0c;不同…

bs架构 erp 进销存_从依赖经验到用柔性ERP,企业少走了多少弯路?

企业在面对紧急订单时&#xff0c;传统企业将面临两难问题&#xff1a;如不接受紧急订单,可能会导致潜在的顾客丢失,损失市场占有率;接受紧急订单,可能会给企业带来很多管理上的问题,如材料采购、库存管理等。而企业通过信息化手段提升生产计划与控制的柔性&#xff0c;则可从容…

Python---统计《三国演义》中出现次数较高的人物

统计《三国演义》中出现次数较高的人物。 import jieba excludes{"先主","将军","却说","荆州","二人","不可","不能","如此","忽然","下马","喊声","马…

Java RandomAccessFile close()方法与示例

RandomAccessFile类close()方法 (RandomAccessFile Class close() method) close() method is available in java.io package. close()方法在java.io包中可用。 close() method is used to close this RandomAccessFile stream and free all other system resources linked wit…

云端: 小软件大平台,绿色又安全 V0.9 Beta3(090722)

云端 是一个小软件&#xff0c;但又是一个大平台。安装云端之后&#xff0c;再使用其他软件不再需要安装——一点、下载、直接使用&#xff1b;并且&#xff0c;通过虚拟化的运行环境&#xff0c;能够保持系统长久的干净、绿色&#xff0c;并保持软件与系统的安全隔离——此方面…

MGraph图(代码、分析、汇编)

目录:代码&#xff1a;分析&#xff1a;汇编&#xff1a;MGrapth图表示有邻接矩阵的方式构成的图结构。邻接矩阵用两个数组保存数据&#xff0c;一个一维数组存储图中的顶点信息&#xff0c;一个二维数组存储图中边或弧的信息。无向图中的二维数组是个对称矩阵 1.0表示无边&…

java: 程序包lombok不存在_Java开发神器:Lombok 学习指南

点击上方“Java知音”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;semlinkerwww.segmentfault.com/a/1190000020864572一、Lombok 简介Lombok 是一款 Java 开发插件&#xff0c;使得 Java 开发者可以通过其定义的一些注解来消除业务工程中…

Python---编程检查并判断密码字符串的安全强度

编程检查并判断密码字符串的安全强度 passwordinput("请输入你的密码&#xff1a;") plist(password) x0 for i in p:if i " ":x1 if x1:print("密码格式不对")#密码中不能包含空格 elif password.isdigit()True or password.isalpha()True:#全…

CFUpdate上传控件的使用

一同事找的这个控件&#xff0c;觉得挺不错的&#xff0c;到官方(http://www.access2008.cn/)下载源码后稍加修改 html页面代码&#xff1a; <html xmlns"http://www.w3.org/1999/xhtml" xml:lang"zh_cn" lang"zh_cn"> <head> <m…

observable_Java Observable addObserver()方法与示例

observable可观察的类addObserver()方法 (Observable Class addObserver() method) addObserver() method is available in java.util package. addObserver()方法在java.util包中可用。 addObserver() method is used to insert the given observer (obs) to the bundles of o…

AAC ADTS格式分析

AAC ADTS格式分析&#xff1a; 没有详细的参数说明&#xff0c;只有格式分析。可以查询文档查看详细参数说明。 ADTS的全称是Audio Data Transport Stream。是AAC音频的传输流格 式。AAC音频格式在MPEG-2&#xff08;ISO-13318-7 2003&#xff09;中有定义。AAC后来 又被采用到…

新知道的几个东西

nginx&#xff08;发音同engine x&#xff09;是一款由俄罗斯程序设计师Igor Sysoev所开发轻量级的网页服务器、反向代理服务器以及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器。起初是供俄国大型的入口网站及搜寻引擎Rambler&#xff08;俄文&#xff1a;Рамбл…

台达plc控制伺服电机编程实例_PLC控制伺服电机:控制脉冲的相关计算

伺服电机PLC通过脉冲的方式控制伺服电机时&#xff0c;其输出脉冲与伺服电机的配置应具有一定的对应关系。如&#xff0c;PLC输出多少个脉冲电机旋转一圈&#xff1f;电机旋转一圈移动的距离(或角度)是多少&#xff1f;这里我们以某伺服电机为例进行举例说明&#xff1a;完成对…