二叉树的存储
创建二叉树需要先创建一个空的结点再进行连接 , 将这个空的结点中的date域赋予数据 , 再判断tree中是否是一个空树 , 如果为空 , 只需要将整个根指向这一个结点即可 , 如果不为空 , 再进行两个判断 , 判断输入的数据是否大于或者小于当前比对的结点数据 , 根据其大小进行相应的排列
1.简介
根据前文的介绍 , 我们知道了二叉树的性值 , 其就是一种每一个结点中只允许拥有左右孩子(或为空)的树 , 这种数据结构在我们的实际设计中非常常用 , 如前文提到的STL中的set集合 , 其底层就是一颗标准的红黑树(二叉树的一种) , 我们这里以创建一颗二叉树并实现通过特定的插入顺序和读取顺序达成读取为顺序为例子进行简介 。
【二叉树的存储】2.结点设计
一颗二叉树的结点设计一定要有如下内容:
a)结点元素 , data域 , 用来存储数据 , 其可以是int , char等基本的类型 , 同时也可以是struct等这些复杂的复合数据类型 。
b)左孩子结点 , left指针 , 总是用来指向当前结点的下一层的左边结点 , 其属于一种指针 。
c)右孩子结点 , right指针 , 总是用来指向当前结点的下一层的右边结点 , 其属于一种指针 。
d)父结点(可选) , parent指针 , 总是指向当前结点的前一个结点 , 简称父亲结点 , 其不属于必须结点设计 , 省略掉可以打扰节省内存的效果 , 而使用则可以更方便进行定向搜索 , 本案例中不使用父节点 。
以上就是一颗二叉树的结点设计 , 除此之外 , 我们使用一棵树的时候需要建立一颗树根 , 由这个“根” , 来进行逐步的向下构建 。
其设计代码可以表示为:
1. 2. //树的结点3. typedef struct node{4.int data;5.struct node* left;6.struct node* right;7.} Node;8. 9. //树根10. typedef struct {11.Node* root;12. } Tree;
3.树的创建
如同当时学习链表的创建 , 首先 , 我们创建一个空的结点再进行连接 , 首先将这个空的结点中的date域赋予数据 , 再判断tree中是否是一个空树 , 如果为空 , 只需要将整个根指向这一个结点即可 , 如果不为空 , 再进行两个判断 , 判断输入的数据是否大于或者小于当前比对的结点数据 , 根据其大小进行相应的排列 , 这样存储进入的数据总是有一定规律的 , 在输出的时候根据这个规律进行输出就可以达到想要的效果 。 其代码可以显示为:
1. 2. //创建树--插入数据3. void insert(Tree* tree, int value){4.//创建一个节点 , 让左右指针全部指向空 , 数据为value5.Node* node=(Node*)malloc(sizeof(Node));6.node->data = http://kandian.youth.cn/index/value;7.node->left = NULL;8.node->right = NULL;9. 10.//判断树是不是空树 , 如果是 , 直接让树根指向这一个结点即可11.if (tree->root == NULL){12.tree->root = node;13.} else {//不是空树14.Node* temp = tree->root;//从树根开始15.while (temp != NULL){ 16.if (value < temp->data){ //小于就进左儿子17.if (temp->left == NULL){18.temp->left = node;19.return;20.} else {//继续往下搜寻21.temp = temp->left;22.}23.} else { //否则进右儿子24.if (temp->right == NULL){25.temp->right = node;26.return;27.}28.else {//继续往下搜寻29.temp = temp->right;30.}31.}32.}33.}34.return;35. }
- 遍历 , 显示树
1. 2. //树的中序遍历 In-order traversal3. void inorder(Node* node){4.if (node != NULL)5.{6.inorder(node->left);7.printf("%d ",node->data);8.inorder(node->right);9.}10. }
文章插图
- 小米科技|性价比拉满!TCL T8E-PRO QLED智屏当属潮玩世代的必备单品
- 华为鸿蒙系统|华为汽车战略布局,进入汽车行业的底气来自哪里?(车车佳)
- 浙江省|浙江的五大富豪,四位做过中国首富,仅马云的阿里就1年纳税366亿
- iOS|恒创科技:Linux日本云服务器安全设置的基本步骤
- javascript|手机移动端的PyTorch来了,还支持JavaScript
- 中关村|柳传志在这里被骗、掘金,书写半部科技史的中关村经历了什么?
- 手机维修|手机维修的猫腻‖你是不是上当了?
- 智能化|感知局限下,车路协同的“子弹”还得再飞会儿
- 华为鸿蒙系统|都2021年底了,为何Mate40Pro还是目前公认最好用的“安卓”手机
- saas|上半年的Redmi K40 Pro,现在入手2500元不到,还等?