c语言将链表写入二进制文件_通过逐级遍历将二进制树转换为单链表的C程序

c语言将链表写入二进制文件

Problem statement: Write a C program to convert a binary tree into a single linked list by traversing level-wise.

问题陈述:编写一个C程序,通过逐级遍历将二进制树转换为单个链表

Example:

例:

Tree 1

The above binary tree is converted to 2 → 7 → 5 → 2 → 6 → 9 → 5 → 11 → 4 → NULL

上面的二叉树被转换为2→7→5→2→6→9→5→11→4→NULL

Solution

  1. Building a linked list - Setting the first node as Head and then appending other nodes.

    构建链接列表 -将第一个节点设置为Head,然后附加其他节点。

  2. Traversing & displaying a single link list.

    遍历并显示单个链接列表 。

  3. Building a tree & level order traversal of a tree.

    建立树和树的层级遍历 。

Algorithm:

算法:

  1. Assign the root value as head node value in linked list.

    在链接列表中将根值分配为头节点值。

  2. Do level-order traversal

    进行水平顺序遍历

    For each

    对于每个

    tree node create a single linked list node and append it to the linked list.

    树节点创建一个链接列表节点 ,并将其附加到链接列表。

  3. Display the single linked list.

    显示单个链接列表。

How the tree is converted to the single list...

树如何转换为单个列表...

Let’s do solve the above example.

让我们来解决上面的例子。

Root=2;
Queue status: 2
----------------------------------------------------
1st iteration
Queue not empty
Queue front is 2
Head is null, thus head is 2
Linked list up to now:2->NULL
Pop 2
Push: 2->left(7) & 2->right(5)
Queue status: 7, 5
----------------------------------------------------
2nd iteration
Queue not empty
Queue front is 7
Head is not null, thus append 7
Linked list up to now:2->7->NULL
Pop 7
Push: 7->left(2)& 7->right(6)
Queue status: 5, 2, 6
----------------------------------------------------
3rd iteration
Queue not empty
Queue front is 5
Head is not null, thus append 5
Linked list up to now:2->7->5->NULL
Pop 5
Push: 5->right (9) only (5->left is NULL)
Queue status: 2, 6, 9 
----------------------------------------------------
4th iteration
Queue not empty
Queue front is 2
Head is not null, thus append 2
Linked list up to now:2->7->5->2->NULL
Pop 2
Push: Nothing ( both child are NULL)
Queue status: 6, 9 
----------------------------------------------------
5th iteration
Queue not empty
Queue front is 6
Head is not null, thus append 6
Linked list up to now:2->7->5->2->6->NULL
Pop 6
Push: 6->left(5) and 6->right(11)
Queue status: 9, 5, 11
----------------------------------------------------
6th iteration
Queue not empty
Queue front is 9
Head is not null, thus append 9
Linked list up to now:2->7->5->2->6->9->NULL
Pop 9
Push: 9->left(4) only (right child NULL)
Queue status: 5, 11, 4
----------------------------------------------------
7th iteration
Queue not empty
Queue front is 5
Head is not null, thus append 5
Linked list up to now:2->7->5->2->6->9->5->NULL
Pop 5
Push: Nothing (both child NULL)
Queue status: 11, 4 
----------------------------------------------------
8th iteration
Queue not empty
Queue front is 11
Head is not null, thus append 11
Linked list up to now:2->7->5->2->6->9->5->11->NULL
Pop 11
Push: Nothing (both child NULL)
Queue status: 4 
----------------------------------------------------
8th iteration
Queue not empty
Queue front is 4
Head is not null, thus append 4
Linked list up to now: 2->7->5->2->6->9->5->11->4->NULL
Pop 4
Push: Nothing (both child NULL)
Queue status: empty queue
----------------------------------------------------
Iteration stops
So final link list is: 2->7->5->2->6->9->5->11->4->NULL

通过逐级遍历将二叉树转换为单链接列表的C实现 (C implementation to to convert a Binary Tree into a Singly Linked List by Traversing Level by Level)

#include <bits/stdc++.h>
using namespace std;
// tree node is defined
class tree{    
public:
int data;
tree *left;
tree *right;
};
class sll{
public:
int data;
sll* next;
};
sll* creatnode(int d){ //create node for single linked list
sll* temp=(sll*)malloc(sizeof(sll));
temp->data=d;
temp->next=NULL;
return temp;
}
void display(sll* head){
sll* current=head; // current node set to head
printf("displayig the converted list...\n");
while(current!=NULL){ //traverse until current node isn't NULL
if(current->next)
printf("%d->",current->data);
else
printf("%d->NULL\n",current->data);
current=current->next; // go to next node
}
}
sll* flatten(tree* root)
{
//Declare queue using STL 
sll* head=NULL,*tempL;
queue<tree*> q;
//enqueue the root
q.push(root);
vector<int> store;
tree* temp;
//do the level order traversal & build single linked list
while(!q.empty()){
//dequeue
temp=q.front();
q.pop();
if(head==NULL){//for inserting first node
head=creatnode(temp->data);
tempL=head;
}
else{//for inserting rest of the nodes
tempL->next=creatnode(temp->data);
tempL=tempL->next;
}
// do level order traversing
if(temp->left)//for left child
q.push(temp->left);
if(temp->right)//for right child
q.push(temp->right);
}
return head;
}
tree* newnode(int data)  // creating new node for tree
{ 
tree* node = (tree*)malloc(sizeof(tree)); 
node->data = data; 
node->left = NULL; 
node->right = NULL; 
return(node); 
} 
int main() 
{ 
//**same tree is builted as shown in example**
cout<<"same tree is built as shown in example\n";
tree *root=newnode(2); 
root->left= newnode(7); 
root->right= newnode(5); 
root->right->right=newnode(9);
root->right->right->left=newnode(4);
root->left->left=newnode(2); 
root->left->right=newnode(6);
root->left->right->left=newnode(5);
root->left->right->right=newnode(11);
cout<<"converting the tree into a single link list...\n";
cout<<"by traversing the tree level-wise\n";
sll* head=flatten(root);
//displaying the list built from the tree
display(head);
return 0; 
} 

Output

输出量

same tree is built as shown in example 
converting the tree into a single link list...
by traversing the tree level-wise
displayig the converted list...
2->7->5->2->6->9->5->11->4->NULL

翻译自: https://www.includehelp.com/c-programs/convert-a-binary-tree-into-a-singly-linked-list-by-traversing-level-by-level.aspx

c语言将链表写入二进制文件

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

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

相关文章

[转载] C Primer Plus 第6章 C控制语句 6.16 编程练习及答案

参考链接&#xff1a; 用Python打印金字塔图案的程序 2019独角兽企业重金招聘Python工程师标准>>> 1、编写一个程序&#xff0c;创建一个具有26个元素的数组&#xff0c;并在其中存储26个小写字母。并让该程序显示该数组的内容。 #include int main (void) { …

C# String和string的区别

C#中同时存在String与string MSDN中对string的说明&#xff1a; string is an alias for String in the .NET Framework。string是String的别名而已&#xff0c;string是c#中的类&#xff0c;String是Framework的类&#xff0c;C# string 映射为 Framework的 String。如果用str…

要求用户在Python中输入整数| 限制用户仅输入整数值

input() function can be used for the input, but it reads the value as a string, then we can use the int() function to convert string value to an integer. input()函数可用于输入&#xff0c;但它将值读取为字符串&#xff0c;然后可以使用int()函数将字符串值转换为…

[转载] python——if语句、逻辑运算符号

参考链接&#xff1a; 用Python链接比较运算符 1.if条件判断语句&#xff1a; if 要判断的条件(True): 条件成立的时候&#xff0c;要做的事情 elif 要判断的条件(True): .... elif 要判断的条件(True): .... else: 条件不成立的时候要做的事情 示例&#xff1a; 判断学生…

洛谷 P2689 东南西北【模拟/搜索】

题目描述 给出起点和终点的坐标及接下来T个时刻的风向(东南西北)&#xff0c;每次可以选择顺风偏移1个单位或者停在原地。求到达终点的最少时间。 如果无法偏移至终点&#xff0c;输出“-1”。 输入输出格式 输入格式&#xff1a; 第一行两个正整数x1,y1&#xff0c;表示小明所…

单链表遍历_单链表及其遍历实现的基本操作

单链表遍历单链表 (Single linked list) Single linked list contains a number of nodes where each node has a data field and a pointer to next node. The link of the last node is to NULL, indicates end of list. 单个链表包含许多节点&#xff0c;其中每个节点都有一…

[转载] python中for语句用法_详解Python中for循环的使用_python

参考链接&#xff1a; 在Python中将else条件语句与for循环一起使用 这篇文章主要介绍了Python中for循环的使用,来自于IBM官方网站技术文档,需要的朋友可以参考下 for 循环 本系列前面 “探索 Python&#xff0c;第 5 部分&#xff1a;用 Python 编程” 一文讨论了 if 语句和…

windows 软链接的建立及删除

在windows服务器上有时有这样的需求&#xff0c;你的文件在f:\test中&#xff0c;但由于其它原因用户访问的是e:\test&#xff0c;如果又希望e:\test 中的文件与f:\test的保持同步&#xff0c;除了用同步软件来做外&#xff0c;可以用windows 的文件夹映射来做 cmd: mklink /J …

8086简单的指令流水线_在8086微处理器中执行流水线的指令和概念的步骤

8086简单的指令流水线Any computer or machine works according to some instructions. These instructions are responsible for all the work that the machine does. But how does a machine work to understand and execute that instruction? 任何计算机或机器都按照某些…

[转载] 使用Python编写打字训练小程序

参考链接&#xff1a; 在Python中切换大小写(替换) 你眼中的程序猿 别人眼中的程序猿&#xff0c;是什么样子&#xff1f;打字如飞&#xff0c;各种炫酷的页面切换&#xff0c;一个个好似黑客般的网站破解。可现实呢&#xff1f; 二指禅的敲键盘&#xff0c;写一行代码&#…

shell两个数字相乘_使用8086微处理器将两个16位数字相乘而不带进位

shell两个数字相乘Problem statement: 问题陈述&#xff1a; To perform multiplication operation between 2 16bit numbers with carry using 8086 Microprocessor. 使用8086微处理器在2个16位数字之间进行带进位的乘法运算。 Algorithm: 算法&#xff1a; Load the first…

Dwr 框架简单实例

Dwr 是一个 Java 开源库&#xff0c;帮助你实现Ajax网站。 它可以让你在浏览器中的Javascript代码调用Web服务器上的Java&#xff0c;就像在Java代码就在浏览器中一样。 Dwr 主要包括两部分&#xff1a; 在服务器上运行的 Servlet 来处理请求并把结果返回浏览器。 运行在浏览器…

[转载] Python进阶:设计模式之迭代器模式

参考链接&#xff1a; Python中的迭代器 在软件开发领域中&#xff0c;人们经常会用到这一个概念——“设计模式”&#xff08;design pattern&#xff09;&#xff0c;它是一种针对软件设计的共性问题而提出的解决方案。在一本圣经级的书籍《设计模式&#xff1a;可复用面向对…

JavaScript | 如何为变量分配十进制,八进制和十六进制值?

Just like C programming language, we can assign integer value in the different format to the variable. 就像C编程语言一样 &#xff0c;我们可以将不同格式的整数值分配给变量。 Assigning decimal value: It can be assigned simply without using any prefix. 分配十…

路由器DHCP和DHCP中继的配置

路由器 DHCP和DHCP中继的配置 路由器作为DHCP服务器&#xff1a; 1.配置router的地址&#xff1a;Route(config)# hostname gateway (更改主机名字) Gateway(config)# interface gigabitethernet 0/0 …

[转载] 大数据分析Python For循环教程

参考链接&#xff1a; Python中的迭代器函数1 大数据分析Python除了循环遍历列表之外&#xff0c;for循环还有很多其他功能&#xff0c;在现实世界的数据科学工作中&#xff0c;您可能需要将numpy数组和pandas DataFrames用于其他数据结构的循环。 大数据分析Python For循环教…

node.js 爬虫入门总结

node.js爬虫 前端同学可能向来对爬虫不是很感冒&#xff0c;觉得爬虫需要用偏后端的语言&#xff0c;诸如 php &#xff0c; python 等。当然这是在 nodejs 前了&#xff0c;nodejs 的出现&#xff0c;使得 Javascript 也可以用来写爬虫了。由于 nodejs 强大的异步特性&#xf…

数组重复次数最多的元素递归_使用递归计算链接列表中元素的出现次数

数组重复次数最多的元素递归Solution: 解&#xff1a; Required function: 所需功能&#xff1a; func_occurence ( node *temp) //recursive functionInput: 输入&#xff1a; A singly linked list whose address of the first node is stored in a pointer, say head and…

SecureCRT中文乱码解决方法

服务端export LANGzh_CN.UTF-8客户端SecureCRT编码选择UTF-8客户端SecureCRT字体选择新宋体&#xff0c;字符集选择中文总结&#xff1a;客户端和服务端字符编码一致&#xff0c;客户端字体字符集支持转载于:https://blog.51cto.com/leomars/1972669

[转载] Python 迭代器 深入理解 与应用示例

参考链接&#xff1a; Python | 可迭代和迭代器之间的区别 本篇文章简单谈谈可迭代对象&#xff0c;迭代器和生成器之间的关系。 三者简要关系图 可迭代对象与迭代器 刚开始我认为这两者是等同的&#xff0c;但后来发现并不是这样&#xff1b;下面直接抛出结论&#xff1a; 1…