二叉树-树转二叉树 使用队列,编写transfrom函数,将普通树转换成对应的二叉树。

树转二叉树
使用队列,编写transfrom函数,将普通树转换成对应的二叉树。二叉树的相关定义如下:

typedef int DataType;
typedef struct Node{DataType data;struct Node* left;struct Node* right;
}BiTNode, *BiTree;

普通树节点的定义如下:

#define MAX_CHILDREN_NUM 5
struct _CSNode
{DataType data;struct _CSNode *children[MAX_CHILDREN_NUM];
};
typedef struct _CSNode CSNode;

其中,子树的根节点的指针存放在children数组的前k个元素中,即如果children[i]的值为NULL,
而children[i-1]不为NULL,则表明该结点只有i棵子树,子树根结点分别保存在children[0]至children[i-1]中。
队列相关定义及操作如下:

struct __Queue
{int i, j; //指向数组内元素的游标void **array;
};
typedef struct __Queue Queue;Queue* create_queue(); //创建队列
bool is_empty_queue(Queue *tree); //队为空返回true,不为空时返回false
void* del_queue(Queue *tree); //结点指针出队
void add_queue(Queue *tree, void *node); //结点指针入队
void free_queue(Queue *tree); //释放队列

transform函数定义如下:

BiTNode* transform(CSNode *root);


其中 root 为普通树的根结点,函数返回该树对应二叉树的根结点。

#include <stdlib.h>
#include <stdio.h>
BiTNode* transform(CSNode *root){if(!root) return NULL;Queue *que, *bque;BiTNode *p;//二叉树根结点创立 //小心点, 记得分配空间 p = (BiTNode *)malloc(sizeof(struct Node));p->data = root->data;p->left = p->right = NULL;que = create_queue();bque = create_queue();//注意add_queue函数的返回值, 所以不用 xx = add_queue(xx)的形式add_queue(que, root);add_queue(bque, p);while(!is_empty_queue(que)){BiTree bq;//创建二叉树队列头结点(根结点) bq = del_queue(bque);CSNode *q;q = del_queue(que);//第一次执行该操作就相当于建立了二叉树的根int i = 0; BiTNode *former = NULL;for(i = 0; i < MAX_CHILDREN_NUM; i++){//递归形式if(q->children[i]){//判存在 BiTNode *bnode = (BiTNode *)malloc(sizeof(struct Node));bnode->data = q->children[i]->data;bnode->left = bnode->right = NULL; //放置结点位置if(i == 0){bq->left = bnode;}else{//兄弟结点变成父子结点former->right = bnode;}former= bnode;add_queue(bque, bnode);add_queue(que, q->children[i]);}} 	}free(que->array);
//释放顺序不能错free(que);free(bque->array);free(bque);return p;
}

 

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

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

相关文章

数据结构-图-邻接矩阵-试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc-icoding

邻接矩阵 试在邻接矩阵存储结构上实现图的基本操作 matrix_insert_vertex 和matrix_insert_arc&#xff0c;相关定义如下&#xff1a; typedef int VertexType;typedef enum{DG, UDG }GraphType;typedef struct{VertexType vertex[MAX_VERTEX_NUM]; //顶点向量int arcs[MAX_V…

gRPC in ASP.NET Core 3.x - gRPC 简介(2)

前一篇&#xff1a;gRPC in ASP.NET Core 3.x - gRPC 简介&#xff08;1&#xff09;身份认证这里指的不是用户的身份认证&#xff0c;而是指多个server和client之间&#xff0c;它们如何识别出来谁是谁&#xff0c;并且能安全的进行消息传输。在身份认证这方面&#xff0c;gRP…

python实现最小二乘法的线性回归_最小二乘法求线性回归的python实现

原文&#xff1a;版权声明&#xff1a;本文为博主原创文章&#xff0c;遵循 CC 4.0 BY-SA 版权协议&#xff0c;转载请附上原文出处链接和本声明。本文链接&#xff1a;https://blog.csdn.net/qq_38003892/article/details/844951721 核心思想通过最小化方差&#xff0c;使得拟…

邻接表1 - 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc-数据结构-图-icoding

邻接表1 试在邻接表存储结构上实现图的基本操作 insert_vertex 和 insert_arc&#xff0c;相关定义如下&#xff1a; typedef int VertexType;typedef enum{DG, UDG }GraphType;typedef struct ArcNode {int adjvex;InfoPtr *info;struct ArcNode *nextarc;}ArcNode;typedef …

.NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

08 | 配置框架&#xff1a;让服务无缝适应各种环境配置是应用程序发布到各种环境的必备能力&#xff0c;这一节开始详细讲解 ASP.NET Core 的配置框架配置框架的核心包有两个&#xff0c;一个抽象包&#xff0c;一个实现包Microsoft.Extensions.Configuration.AbstractionsMicr…

python循环遍历所有目录_python 遍历文件夹

一、os.walk()os.walk(top, topdownTrue, οnerrοrNone, followlinksFalse)可以得到一个三元tupple(dirpath, dirnames, filenames),第一个为起始路径&#xff0c;第二个为起始路径下的文件夹&#xff0c;第三个是起始路径下的文件。dirpath 是一个string&#xff0c;代表目录…

邻接表2 -试在邻接表存储结构上实现图的基本操作 del_vertex-数据结构-图-icoding

邻接表2 试在邻接表存储结构上实现图的基本操作 del_vertex&#xff0c;相关定义如下&#xff1a; typedef int VertexType;typedef enum{DG, UDG }GraphType;typedef struct ArcNode{int adjvex;InfoPtr *info;struct ArcNode *nextarc; }ArcNode;typedef struct VNode{Vert…

python提取文件名的5-6位_python提取文件名

首先声明本人初涉python&#xff0c;由于是自学&#xff0c;而且课余时间比较琐碎&#xff0c;所以打算分主次两条线。主的一条线是看python教程&#xff0c;但是这样实在枯燥&#xff0c;所以又有了次的一条线&#xff0c;就是写一些小程序练练手&#xff0c;只想总结下所得&a…

【译】探索更轻量的Electron替代品来托管Blazor桌面应用程序

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客&#xff0c;发表于 2019 年 11 月 1 日。Steve Sanderson 是 Blazor 最早的创造者。这篇文章发布后还有一篇后续&#xff0c;是介绍一个在本文提到的跨平台 webview 概念的落地项目 WebWindow &#xff0c;我也会接着翻译过…

MATLAB-矩阵基本语法知识

数组创建 1.要创建每行包含四个元素的数组&#xff0c;请使用逗号 (,) 或空格分隔各元素。 这种数组为行向量。 要创建包含多行的矩阵&#xff0c;请使用分号分隔各行。 a [1 2 3; 4 5 6; 7 8 10] 2.创建矩阵的另一种方法是使用 ones、zeros 或 rand 等函数。例如&#x…

mysql 剔除不可见字符_不可见字符,Excel里最隐蔽的坑

小伙伴们好啊&#xff0c;我是流浪铁匠&#xff0c;今天为大家介绍的是excel数据整理时一类最常见的坑——不可见字符。从unichar函数对应的uincode字符集结果来说&#xff0c;excel大约有111万个字符&#xff0c;其中有不少字符的性质千奇百怪&#xff0c;由于unichar/unicode…

同为Chromium浏览器,Edge却被“特别关照”

谷歌会在 Microsoft Edge 用户访问 Chrome Web Store&#xff08;Chrome 网上应用商店&#xff09; 时发去一条通知提醒&#xff0c;建议用户切换到 Google Chrome 以安全地使用扩展程序&#xff0c;通知还提供了下载 Google Chrome 的链接。不过有趣的是&#xff0c;其他 Chro…

数据结构-查找-总结归纳知识点

//第八章 查找 //基于线性表的查找 // 1.顺序查找法 //思想:所给的关键字和表中元素的关键字逐个比较 分为:设置监视哨和不设监视哨 监视哨:r[0]防止越界 //2.折半查找法 要求:顺序储存结构(不能链表),按照关键字大小有序排列(正序和逆序) 思想:利用mid(highlow)/2(整数). …

噪声与振动控制工程手册_声学分享客噪声与振动控制篇大型隔振工程案例介绍...

第一期《声学分享客--噪声与振动控制篇》将于今日上午10&#xff1a;00~11&#xff1a;00&#xff0c;在线直播&#xff0c;欢迎各位上线交流。主讲人&#xff1a;苏宏兵报告内容&#xff1a;大型隔振工程案例介绍报告人介绍&#xff1a;苏宏兵&#xff0c;工学硕士&#xff0c…