当前位置:网站首页>C语言版:二叉树的静态建立
C语言版:二叉树的静态建立
2022-04-21 06:24:00 【历飞雨_smile】
数据结构C语言版:二叉树建立分为两类, 静态建立, 动态建立, 本文章介绍静态建立, 动态建立后续会更新。
这是本文章所用到的二叉树的图
二叉树
二叉树:是树里面最容易实现,且运用最广泛的树,像操作系统中的目录文件的组织结构, 编译系统里面的源程序的语法结构等等。
提示:以下是本篇文章正文内容,下面案例可供参考
一、静态建立概念
静态建立:指数据较少且明确的时候,我们只需要将这些数据连接起来,形成二叉树的结构便可。
二、结点设置和生成
结点设置 :需要两个直接后继, 也就是两个指针域和一个数据域,一个是左子树的存放地址, 另外一个是右子树的存放地址。
1.设置
代码如下(示例):
//两个指针:一个指向左子树,另外一个指向右子树, 依次往下也是这样的结构
typedef struct TreeNode
{
struct TreeNode *left_child, *right_child; //指针域:左孩子,右孩子
char data; //数据域
}RTreeNode;
2.生成
代码如下(示例):
//生成的是一个二叉树结点
RTreeNode *init_tree_node(char data, RTreeNode *left_child, RTreeNode *right_child)
{
RTreeNode *node;
node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->left_child = left_child;
node->right_child = right_child;
node->data = data;
return node;
}
//静态生成一颗二叉树
RTreeNode *init_tree()
{
RTreeNode *root, *b, *c, *d, *e, *f;
f = init_tree_node('F', NULL,NULL);
e = init_tree_node('E', NULL,NULL);
d = init_tree_node('D', NULL,NULL); //叶子结点
c = init_tree_node('C', e, f);
b = init_tree_node('B', d ,NULL);
root = init_tree_node('A', b, c);
return root;
}
这就是利用二叉树结构的性质,将这些数据连串在一起。
三、代码实现
//
// Created by xoo on 2021/7/3.
//
//二叉树的建立和遍历, 静态构建(已有的数据,连接成一个二叉树,数据较小适用),三种遍历方式
#include<stdio.h>
#include<stdlib.h>
#include<string>
typedef struct TreeNode
{
struct TreeNode *left_child, *right_child; //指针域:左孩子,右孩子
char data; //数据域
}RTreeNode;
//生成的是一个二叉树结点
RTreeNode *init_tree_node(char data, RTreeNode *left_child, RTreeNode *right_child)
{
RTreeNode *node;
node = (struct TreeNode*)malloc(sizeof(struct TreeNode));
node->left_child = left_child;
node->right_child = right_child;
node->data = data;
return node;
}
//静态生成一颗二叉树
RTreeNode *init_tree()
{
RTreeNode *root, *b, *c, *d, *e, *f;
f = init_tree_node('F', NULL,NULL);
e = init_tree_node('E', NULL,NULL);
d = init_tree_node('D', NULL,NULL); //叶子结点
c = init_tree_node('C', e, f);
b = init_tree_node('B', d ,NULL);
root = init_tree_node('A', b, c);
return root;
}
//先序遍历
void front_preorder(RTreeNode *p)
{
if(p != NULL){
printf("->%c", p->data);
front_preorder(p->left_child);
front_preorder(p->right_child);
}
}
//中序遍历
void center_preorder(RTreeNode *p)
{
if(p != NULL){
center_preorder(p->left_child);
printf("->%c", p->data);
center_preorder(p->right_child);
}
}
//后序遍历
void after_preorder(RTreeNode *p)
{
if(p != NULL){
after_preorder(p->left_child);
after_preorder(p->right_child);
printf("->%c", p->data);
}
}
int main()
{
RTreeNode *tree;
tree = init_tree(); //生成一颗树
printf("先序遍历:\n");
front_preorder(tree);
printf("\n中序遍历:\n");
center_preorder(tree);
printf("\n后序遍历: \n");
after_preorder(tree);
}
结果:
先序遍历:
->A->B->D->C->E->F
中序遍历:
->D->B->A->C->E->F
后序遍历:
->D->B->E->F->C->A
总结
二叉树的静态建立适用范围: 数据较少, 数据已知情况下, 为了方便理解二叉树如何建立的,还是建立掌握,很简单,但也是基础,为动态建立做充分的准备。
版权声明
本文为[历飞雨_smile]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_53318344/article/details/118431712
边栏推荐
猜你喜欢
随机推荐
杂项1
vscode 自定义注释
“华为杯“ 武汉大学21级新生程序设计竞赛 J.传闻档案
用MATLAB写一个自动生成福利彩票双色球号码的程序
Code analysis of distributed lock principle using ZK
Program download and data extraction using JLINK command line
Integers Have Friends 区间gcd + 双指针
yolov5的onnx模型去除transpose层
[w5500] STM32 h743 drives w5500 for UDP transceiver
跨域问题-Allow-Origin header contains multiple values... but only one is allowed
数据的导出
用JS函數形式實現一個Array.prototype.forEach(),.map(),.filter()
Reflection cannot find the class message classnotfound of UDF when executing flinksql code
【ThreadX】H743+ThreadX+FileX移植记录
异步RPC的三种方式:异步调用,异步监听,callback调用
GDB调试器安装与使用
CF6D Lizards and Basements 2题解
Sql中 代替not in的一种解决方式
Substring Inversion (Easy Version)
云计算中存储继承知识







![[ksz8863] information summary and board verification results of ksz8863 switch chip](/img/a0/2bfb72104d2ad3f42f1bd3121c58b4.png)
