二叉链表——构建与输出_构建一个用二叉链表存储一个公司组织机构的相关数据的程序,假设该公司的下属-程序员宅基地

技术标签: 二叉树  遍历二叉树  顺序二叉树  链式二叉树  数据结构  

顺序存储结构

数据结构

const int MAX_TREE_SIZE = 100;
typedef int SeqBTree[MAX_TREE_SIZE + 1];//0位置存储结点个数

构建

数组依次递增对应按层构建二叉树

输出

凹入表示法输出

void PrintSeqBTree(const SeqBTree t,int i)//凹入表示法打印以i为根节点的完全二叉树
{
    
 int k = log(t[0]) / log(2) + 1;//层数
 if (i > t[0]) return;
 int m = log(i) / log(2);
 while (m--) cout << ' ';
 cout << t[i];
 m = k - (int)(log(i) / log(2) + 1);
 while (m--) cout << '-';
 cout << endl;
 PrintSeqBTree(t, i * 2);
 PrintSeqBTree(t, i * 2 + 1);
}

源码

#include<iostream>
#include<math.h>
using namespace std;
const int MAX_TREE_SIZE = 100;
typedef int SeqBTree[MAX_TREE_SIZE + 1];//0位置存储结点个数
void PrintSeqBTree(const SeqBTree t,int i)//凹入表示法打印以i为根节点的完全二叉树
{
    
 int k = log(t[0]) / log(2) + 1;//层数
 if (i > t[0]) return;
 int m = log(i) / log(2);
 while (m--) cout << ' ';
 cout << t[i];
 m = k - (int)(log(i) / log(2) + 1);
 while (m--) cout << '-';
 cout << endl;
 PrintSeqBTree(t, i * 2);
 PrintSeqBTree(t, i * 2 + 1);
}
int main()
{
    
 int i;
 SeqBTree bt;
 cout << "请输入二叉树的结点数:";
 cin >> bt[0];
 cout << "请依次输入二叉树的各个结点:" << endl;
 for (i = 1; i <= bt[0]; i++) cin >> bt[i];
 PrintSeqBTree(bt,1);
 return 0;
}

链式存储结构

数据结构

typedef struct BTNode {
    
 char data;
 BTNode* lChild;
 BTNode* rChild;
}BTNode, * BTTree;

构建二叉链表

由先序遍历序列和中序遍历序列构建

BTTree CreatBTTreeByPreAndInfixOrder(char* pre, char* in,int n)//根据先序和中序遍历序列建立二叉链表
{
    
 if (n <= 0) return NULL;
 int i;
 BTTree t = (BTTree)malloc(sizeof(BTNode));
 t->data = pre[0];
 for (i = 0; in[i] != pre[0]; i++);
 t->lChild = CreatBTTreeByPreAndInfixOrder(pre + 1, in, i);
 t->rChild = CreatBTTreeByPreAndInfixOrder(pre + i + 1, in + i + 1, n - i - 1);
 return t;
}

由中序遍历序列和后序遍历序列构建

BTTree CreatBTTreeByInfixAndPostOrder(char* in, char* post, int n)//根据中序和后序遍历序列建立二叉链表
{
    
 if (n <= 0) return NULL;
 int i;
 BTTree t = (BTTree)malloc(sizeof(BTNode));
 t->data = post[n - 1];
 for (i = 0; in[i] != post[n - 1]; i++);
 t->lChild = CreatBTTreeByInfixAndPostOrder(in, post, i);
 t->rChild = CreatBTTreeByInfixAndPostOrder(in + i + 1, post + i, n - i - 1);
 return t;
}

输出二叉链表

按先序遍历输出

void PrintBTTreeByPreorder(BTTree t)//打印先序遍历二叉链表
{
    
 if (t)
 {
    
  cout << t->data;
  PrintBTTreeByPreorder(t->lChild);
  PrintBTTreeByPreorder(t->rChild);
 }
}

按中序遍历输出

void PrintBTTreeByInfixorder(BTTree t)//打印中序遍历二叉链表
{
    
 if (t)
 {
    
  PrintBTTreeByInfixorder(t->lChild);
  cout << t->data;
  PrintBTTreeByInfixorder(t->rChild);
 }
}

按后序遍历输出

void PrintBTTreeByPostorder(BTTree t)//打印后序遍历二叉链表
{
    
 if (t)
 {
    
  PrintBTTreeByPostorder(t->lChild);
  PrintBTTreeByPostorder(t->rChild);
  cout << t->data;
 }
}

源码

#include<iostream>
#include<stdlib.h>
#include<String.h>
using namespace std;
typedef struct BTNode {
    
 char data;
 BTNode* lChild;
 BTNode* rChild;
}BTNode, * BTTree;
void PrintBTTreeByPreorder(BTTree t)//打印先序遍历二叉链表
{
    
 if (t)
 {
    
  cout << t->data;
  PrintBTTreeByPreorder(t->lChild);
  PrintBTTreeByPreorder(t->rChild);
 }
}
void PrintBTTreeByInfixorder(BTTree t)//打印中序遍历二叉链表
{
    
 if (t)
 {
    
  PrintBTTreeByInfixorder(t->lChild);
  cout << t->data;
  PrintBTTreeByInfixorder(t->rChild);
 }
}
void PrintBTTreeByPostorder(BTTree t)//打印后序遍历二叉链表
{
    
 if (t)
 {
    
  PrintBTTreeByPostorder(t->lChild);
  PrintBTTreeByPostorder(t->rChild);
  cout << t->data;
 }
}
BTTree CreatBTTreeByPreAndInfixOrder(char* pre, char* in,int n)//根据先序和中序遍历序列建立二叉链表
{
    
 if (n <= 0) return NULL;
 int i;
 BTTree t = (BTTree)malloc(sizeof(BTNode));
 t->data = pre[0];
 for (i = 0; in[i] != pre[0]; i++);
 t->lChild = CreatBTTreeByPreAndInfixOrder(pre + 1, in, i);
 t->rChild = CreatBTTreeByPreAndInfixOrder(pre + i + 1, in + i + 1, n - i - 1);
 return t;
}
BTTree CreatBTTreeByInfixAndPostOrder(char* in, char* post, int n)//根据中序和后序遍历序列建立二叉链表
{
    
 if (n <= 0) return NULL;
 int i;
 BTTree t = (BTTree)malloc(sizeof(BTNode));
 t->data = post[n - 1];
 for (i = 0; in[i] != post[n - 1]; i++);
 t->lChild = CreatBTTreeByInfixAndPostOrder(in, post, i);
 t->rChild = CreatBTTreeByInfixAndPostOrder(in + i + 1, post + i, n - i - 1);
 return t;
}
int main()
{
    
 char s1[20] = "BFDGAC", s2[20] = "FGDBCA";
 BTTree t = CreatBTTreeByInfixAndPostOrder(s1, s2, 6);
 PrintBTTreeByPreorder(t);
 return 0;
}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/The_Only_God/article/details/102639262

智能推荐

MATLAB绘图 最大化全屏后保存_matlab画图全屏-程序员宅基地

文章浏览阅读6.8k次,点赞5次,收藏21次。MATLAB绘图 最大化全屏后保存一、绘图[^1]二、图例[^2]添加图例的方式一:添加图例的方式二设置图例的排列方式图例的位置和列数显示指定曲线的图例图例背景和轮廓三、保存[^3]参考资料欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图_matlab画图全屏

解决Openwrt /etc/config目录下没有wireless文件的方法_openwrt没有无线选项-程序员宅基地

文章浏览阅读9.1k次。解决Openwrt /etc/config目录下没有wireless文件的方法一、环境说明Linux内核版本:4.4.9LEDE版本:17.01.4芯片:MT7628二、解决方法1、在以下网站中寻找MT7628支持的无线网卡驱动。网址:https://wireless.wiki.kernel.org/en/users/drivers2、在Manufacturer一栏找到MTK,点击左边的驱动名称,如下所示:看到支持MT76283、进入Openwrt源码的顶层目录,执行make men_openwrt没有无线选项

Halcon中两种实现旋转的方法rotate_image和affine_trans_image-程序员宅基地

文章浏览阅读4w次,点赞2次,收藏49次。Halcon中实现旋转的方式由两种。一种是rotate_image,该方式实现简单,但只能绕中心旋转。二是affine_trans_image,该方式实现较复杂,但是可以实现绕任意位置的旋转。_rotate_image

MySQL Workbench用csv格式导出以及出现数据乱码的解决_workbench导出csv乱码-程序员宅基地

文章浏览阅读4.8k次,点赞3次,收藏10次。近期毕设采集数据需从MySQL数据库中导出CSV文件,我用的是MySQL Workbench导出步骤:1、第一步,选中数据库表babynutrition,鼠标右键选择“数据导出”选项,打开导出弹窗,注意导出的数据格式2、第二步,选择导出表字段,需要导出多少行,从那行开始导出,确定后单击“Next”,进入下一步,如下图所示:3、第三步,选择导出文件路径,并填写导出文件名;选择导出..._workbench导出csv乱码

Aspose.Words 将Word(DOC / DOCX)转换为HTML教程_aspose.words 转html-程序员宅基地

文章浏览阅读2.5k次。Microsoft Word文件格式DOC / DOCX很著名,因为文字处理器支持多种功能来组织和解释信息。同样,HTML文件格式有助于在Web应用程序中显示信息。使用Java将Word(DOC / DOCX)转换为HTML 使用Java将DOCX转换为HTML5 使用Java将受密码保护的Word文件转换为HTML 使用Java将Word转换为MHTML①使用Java将Word(DOC / DOCX)转换为HTML可以按照以下步骤将Word转换为HTML:加载带有DOC或DOCX扩展名_aspose.words 转html

编译7源码时,报错:SSL error when connecting to the Jack server. Try ‘jack-diagnose‘_failed: /bin/bash -c "(prebuilts/sdk/tools/jack-ad-程序员宅基地

文章浏览阅读5.9k次,点赞11次,收藏26次。ninja: Entering directory `.'[ 0% 1/2530] Ensure Jack server is installed and startedFAILED: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.8.ALPHA.jar 2>..._failed: /bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuil

随便推点

Java 小程序:实现一个购物流程的功能-程序员宅基地

文章浏览阅读989次。1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162..._java实现购买_一个简单的实现购买商品功能的java小程序

16、先天八卦与后天八卦各自有什么用途?-程序员宅基地

文章浏览阅读700次。http://www.360doc.com/content/13/0523/19/944966_287585372.shtml转载于:https://www.cnblogs.com/xue0/p/4798139.html_先天八卦与后天八卦各自有什么用途

BSD操作系统大盘点:四种主流BSD_盲点监测-程序员宅基地

文章浏览阅读9.4k次,点赞3次,收藏10次。【导读】本文将提供四个主要的BSD变体的对比,并且对基于服务器和台式电脑的解决方案提供一些建议。 那些要使用公共Unix变体的机构有两个可选解决方案inux和BSD。人们谈论比较多的Linux阵营包含了各种发布版软件。这些软件包括不同的工具和工具集。人们很少谈及的BSD阵营也是如此。本文将提供四个主要的BSD变体的对比,并且对基于服务器和台式电脑的解决方案提供一些建议。  BSD的_盲点监测

【JS】Es6无法注销事件 | class构造函数里无法注销事件解决方法(亲测有效)_js 注销事件-程序员宅基地

文章浏览阅读350次。【JS】Es6无法注销事件 | class构造函数里无法注销事件解决方法(亲测有效)_js 注销事件

iOS版本AppRTCMobile和webrtc.framework构建_webrtc 新增自定义模块方法-程序员宅基地

文章浏览阅读5.1k次。iOS版本AppRTCMobile和webrtc.framework构建_webrtc 新增自定义模块方法

基于FPGA的cameralink编解码测试系统设计_基于fpga的cameralink编码测试系统设计-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏15次。1、目的项目需要设计一个多功能参数可变的cameralink相机视频接收机,接收到相机传过来的视频数据通过PCIE往上位机发。开始没有可供测试的相机,于是想着用FPGA模拟cameralink协议自行写一个视频发送机,用于对接自己的设计的cameralink视频接收机;采用两块FPGA板对接,用lvds差分信号传输数据;发送机实现FPGA对视频数据的cameralink协议编码;接收机实现FPGA对视频数据的cameralink协议解码;接收到的数据是:portA,portB,por_基于fpga的cameralink编码测试系统设计

推荐文章

热门文章

相关标签