Code前端首页关于Code前端联系我们

存储二叉树、创建、创建节点、遍历...C语言示例代码

terry 2年前 (2023-09-27) 阅读数 69 #数据结构与算法

存储二叉树

1.简介

根据前面的介绍,我们知道了二叉树的属性值,二叉树是每个节点的一种。只允许有左子树和右子树(或空树)的树进入其中。这种数据结构在我们的实际设计中使用的非常频繁。比如上面提到的STL中的字符串集合,底层就是一个标准的红黑树(二叉树)。 (某种程度上),我们将在这里以创建二叉树并通过特殊的插入顺序和读取顺序实现读取顺序的示例来介绍它。

2。节点设计

二叉树节点的设计必须有以下内容:

a) 节点元素,用于存储数据的数据字段,可以是 int、char 等基本元素类型,也可以是复数复合数据类型,例如结构体。

b) 左子节点,左指针,总是用来指​​向当前节点的下一层的左节点,是指针的一种。

c) 右子节点,即右指针,总是用来指​​向当前节点的下一层的右节点。它是一种指针。

d)父节点(可选),父指针始终指向当前节点的前一个节点,称为父节点。这不是必要的节点设计,省略它可能会影响内存节省效果。通过使用它,可以更加方便地进行有针对性的搜索。在这种情况下,不使用父节点。

以上是二叉树节点的设计。另外,当我们使用树时,我们需要建立树根。从这个“根”开始,我们将逐步向下构建。

格式代码可以表示为:

1234567891011//树节点 typedef struct 节点{ int 数据; struct 节点* 左; struct 节点* 右; }节点; / /树根typedef struct { 节点*根; }树;树的创建

就像当时一样。要学习如何创建链表,我们首先创建一个空节点,然后将其链接起来。首先将数据赋值给空节点中的日期字段,然后判断该树是否为空树。如果为空,我们只需要将其全部相加即可。根仅指向该节点。如果不为空,则再检查两次,判断输入数据是否大于或小于当前比较的节点数据,并根据其大小进行适当的分配,保存输入数据总量。有一定的规则。打印时,按照这个规则打印即可达到想要的效果。

代码可表示为:

//创建树--插入数据 nil insert(Tree* tree, int value ){ //创建节点,让左右指针指向零,数据为value Node* node=(Node*)malloc(大小(节点));节点->数据=值;节点->左= NULL;节点->右=空; | ; //不是空树                                                 = tree->root;//从树的根开始 同时(温度!= NULL){ if (value data){ //如果年龄较小,则输入左儿子                                                                                                                                                                            节点; {//继续搜索
1234567891011} else { // 否则输入右子 (temp->right == NULL) { = 节点; 其他 {//继续往下查找

temp = temp->right;

} }            }                ?悲剧按顺序(节点​​​!= NULL) { 按顺序(节点->左); inorder(node-> right);}}

本文代码

#include #include #include using 命名空间 std; //树节点 typedef struct 节点{ int数据;结构节点*左;结构 节点* 右;} 节点; //树根typedef struct { Node *root; } Tree;//创建树 --插入数据 void insert(tree* tree, int value){ //创建节点,使左右指针指向为空,数据为值 Node* node=(Node*)malloc(sizeof(Node)); 节点 -> data = value; node->left = NULL; node->right = NULL; //判断树是否为空树,if所以,直接让树的根指向这个节点 if (tree->root == NULL){ tree->root = no de ; | //从根开始                              while (temp != NULL){ if (值数据){ / /如果你比那个矮,请输入左子 | >左=节点;return;//否则输入右子 if  (temp->right == NULL) { TeMP->Right = Node; 返回}} {{{搜 // 继续向下搜索 Temp = Temp-> Right; }} } }}}} 返回;} //按顺序遍历树按顺序遍历树null inorder(节点*节点){ if (节点!= NULL) inorder(节点- >左);printf("%d",节点->数据); 按顺序(节点->右); } int main(){ 树树;树.root = NULL;//创建构建一棵空树 int n; scanf( "% d",&n); //输入 n 个数字并创建此树 for (int i = 0; i ,&temp);    插入(&树,temp);}inorder(tree.root); //传入订购 返回 0; }

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门