前几日总结 , 树型结构--》二叉树,二叉树的创建与销毁,二叉树的遍历

树型结构 :特点为  一对多

概念:


由n个结点组成的有限集

有一个根结点;其他结点只有一个前驱结点,但可以有多个后继结点(一对多)

n = 0时为空树

专业词汇:


叶子结点(终端结点 )只有前驱没有后继

根结点 A

分支节点 B\C\D

结点度 :该结点后继结点的个数 

度(默认为广度)


深度:这棵树所对应的层数

广度:这棵树里结点度最大的度

二叉树

树的度(广度)为2   且子节点的位置不能交换的数叫做二叉树

满二叉树

在不增加层数的情况下无法再增加一个结点(叶子结点处于同一层、除叶子结点其他结点的度都为2)

k层满二叉树:

        第k层结点个数:2^(k-1);

        k层结点总个数:2^k-1;

完全二叉树

满二叉树是完全二叉树,完全二叉树不一定是满二叉树

概念:在满二叉树的基础上,若要增加结点只能从上至下、从左至右依次增加;若要删除结点只能从下至上、从右至左依次删除,则剩下的树为完全二叉树

例:有一棵完全二叉树的总结点个数为4847个,求该二叉树的叶子结点个数

答:2424个

二叉树的遍历

前序遍历
根结点        左子树        右子树 —— A B C E H D F G        深度优先

中序遍历
左子树        根结点        右子树 —— C B H E A F D G        深度优先

后序遍历
左子树        右子树        根节点 —— C H E B F G D A        深度优先

层序遍历
从上至下、从左至右  逐层遍历 —— A B D C E F G H        广度优先

#include "tree.h"
#include "queue.h"char tree[] = "ABC##EH###DF##G##";
int idx = 0;/*创建二叉数*/
TREE_NODE *create_Btree()
{BTDATA_TYPE data = tree[idx++];TREE_NODE *pnode = malloc(sizeof(TREE_NODE));if('#' == data){return NULL ;}pnode ->data =data;pnode ->pl = create_Btree();pnode ->pr = create_Btree();return pnode;
}/*前序遍历*///根左右
void pre_order(TREE_NODE *proot)
{if(NULL == proot){return;}printf("%c",proot->data);pre_order(proot->pl);pre_order(proot->pr);
}
/*中序遍历*///左根you
void mid_order(TREE_NODE *proot)
{if(proot == NULL){return ;}mid_order(proot->pl);printf("%c",proot->data);mid_order(proot->pr);
}
/*后序遍历*/
void end_order(TREE_NODE *proot)
{if(proot == NULL){return ;}end_order(proot->pl);end_order(proot->pr);printf("%c",proot->data);
}
/*层序遍历*/
void level_order(TREE_NODE *proot)
{QUEUE_LIST *plist = creat_link();if(plist == NULL){return;}DATA_TYPE outdata;push_tail_queue(plist,proot);while(!is_empty_queue(plist)){pop_tail_delete(plist,&outdata);printf("%c ",outdata->data);if(outdata->pl != NULL){push_tail_queue(plist,outdata->pl);}if(outdata->pr != NULL){push_tail_queue(plist,outdata->pr);}}printf("===============");queue_destort(plist);
}
/*获取二叉树结点个数*/
int get_tree_nodenum(TREE_NODE *pnode)
{	if(NULL == pnode){return 0;}return get_tree_nodenum(pnode->pl) + get_tree_nodenum(pnode->pr) + 1;
}/*获取二叉树的层数*/
int get_tree_layer_cnt(TREE_NODE *proot)
{if(NULL == proot){return 0;}int layl = get_tree_layer_cnt(proot->pl);int layr = get_tree_layer_cnt(proot->pr);return layl > layr ? layl+1:layr+1;
}/*销毁二叉树*/
void destory_btree(TREE_NODE *proot)
{if(NULL == proot){return;}destory_btree(proot->pl);destory_btree(proot->pr);free(proot);
}


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

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

相关文章

Git的原理和使用(四):理解分布式版本控制系统与远程仓库的相关配置

目录 远程操作 理解分布式版本控制系统 远程仓库 新建远程仓库 克隆远程仓库 向远程仓库推送 拉取远程仓库 配置Git 忽略特殊文件 为命令配置别名 标签管理 理解标签 创建标签 操作标签 远程操作 理解分布式版本控制系统 1、每个人的电脑都是一个完整的版本库&…

面试准备-基础【面试】

面试准备-基础【面试】 数据结构二叉树完全二叉树满二叉树BST 二叉排序树|二叉搜索树AVL 平衡二叉树B树 多路平衡查找树B树红黑树哈夫曼树散列 操作系统面试题并行和并发什么是进程?进程和程序的区别?进程的基本状态什么是线程?线程和进程的区…

【Linux】 gcc(linux下的编译器)程序的编译和链接详解

目录 前言:快速认识gcc 1. 程序的翻译环境和执行环境 2.编译和链接 2.1翻译环境 2.2编译环境 1. 预处理 gcc -E指令 test.c(源文件) -o test.i(生成在一个文件中,可以自己指定) 预处理完成之后就停下来&am…

【YOLOV5 入门】——detect.py简单解析模型检测基于torch.hub的检测方法

声明:笔记是毕设时根据B站博主视频学习时自己编写,请勿随意转载! 一、打开detect.py(文件解析) 打开上节桌面创建的yolov5-7.0文件夹里的detect.py文件(up主使用的是VScode,我这里使用pycharm…

浅模仿小米商城布局(有微调)

CSS文件 *{margin: 0;padding: 0;box-sizing: border-box; }div[class^"h"]{height: 40px; } div[class^"s"]{height: 100px; } .h1{width: 1528px;background-color: green; } .h11{background-color:rgb(8, 220, 8); } .h111{width: 683px;background-c…

课堂行为动作识别数据集

一共8884张图片 xml .txt格式都有 Yolo可直接训练 已跑通 动作类别一共8类。 全部为教室监控真实照片,没有网络爬虫滥竽充数的图片,可直接用来训练。以上图片均一一手工标注,标签格式为VOC格式。适用于YOLO算法、SSD算法等各种目标检测算法…

数字化运营策略大揭秘:畅销书《数字化运营》详解

简介 数字化转型已经成为大势所趋,各行各业正朝着数字化方向转型,利用数字化转型方法论和前沿科学技术实现降本、提质、增效,从而提升竞争力。 数字化转型是一项长期工作,包含的要素非常丰富,如数字化转型顶层设计、…

对form表单对象中数组中的字段进行校验的方法

当对form表单中&#xff0c;数组readings中的字段进行校验时&#xff0c;prop和rules绑定要写成动态的&#xff0c;如下代码 <div v-for"(item,index) in form.readings"><el-form-item label"上次读数" > <!--prop"scds"-->…

模板

一、函数模板 当我们在编写一个交换数据的函数时&#xff0c;不同的数据类型就要对应不同的交换函数类型&#xff0c;但其实这个交换函数的主体非常一致&#xff0c;为了解决这个问题就引入了模板&#xff1a; 如上图&#xff0c;template <class T>或template<tyoena…

Jenkins常用插件安装及全局配置

Jenkins常用插件安装及全局配置 前言 ​ Jenkins是一个流行的持续集成工具&#xff0c;通过安装适用的插件&#xff0c;可以扩展Jenkins的功能&#xff0c;并与其他工具和系统集成。本文将介绍一些常用的Jenkins插件以及安装和配置的步骤。通过安装和配置这些常用插件&#xf…

企业选购USB服务器,有哪些注意事项?

一、前言 随着信息技术的飞速发展&#xff0c;USB服务器在企业日常运营中的作用日益凸显。USB服务器不仅实现了远程USB设备的共享和管理&#xff0c;还提升了企业数据的安全性和管理效率。 然而&#xff0c;面对市场上琳琅满目的USB服务器产品&#xff0c;企业在选购时需要注…

寻求买金途径 国内的黄金交易所有哪些?

近期黄金价格在不断上涨&#xff0c;很多投资者都想找买黄金的机会。除了我们耳熟能详的现货黄金以外&#xff0c;投资者还想找一些国内的手段去购买黄金。他们想知道国内的黄金交易所有哪些&#xff0c;下面我们就来讨论一下。 说起国内的黄金交易所&#xff0c;我们首先要提到…