数据结构 --- 二叉树

一、满二叉树

在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子节点都在同一层上,这

样的二叉树称为满二叉树。

每层节点数量为 2 ^ (n - 1)        (n为层数)

总节点个数为    2 ^ n - 1

二、完全二叉树

 在满二叉树的基础上,从上往下,从左往右增加节点;从下往上,从右往左减少节点

        满二叉树  ====  完全二叉树 

        完全二叉树  ====? 满二叉树

三、二叉树的遍历

创建一个二叉树 (扩展二叉树)

pl(坐指针) Apr(右指针)
#ifndef __TREE_H__
#define __TREE_H__typedef char TDatatype;typedef struct tnode
{TDatatype data;struct tnode *pl;struct tnode *pr;
}tnode_t;tnode_t *create_bin_tree();
void pre_order(tnode_t *proot);
void mid_order(tnode_t *proot);
void behind_order(tnode_t *proot);
int get_tree_node(tnode_t *proot);
int get_tree_layer(tnode_t *proot);
void destroy_tree(tnode_t *proot);
void push_tree(tnode_t *proot);#endif
char tree[] = {"ABEH###G##CF#D##I##"};
int idx;tnode_t *create_bin_tree()
{TDatatype data = tree[idx++];if(data == '#'){return NULL;}tnode_t *pnode = (tnode_t *)malloc(sizeof(tnode_t));if(!pnode)return NULL;pnode->data = data;pnode->pl = create_bin_tree();pnode->pr = create_bin_tree();return pnode;
}

前序遍历:        根        左子树        右子树        ABEHGCFDI

中序遍历:        左子树        根        右子树        HEBGAFDCI

后序遍历:        左子树        右子树        根        HEGBDFICA

层序遍历:从上至下,从左至右,逐层遍历       ABCEGFIHD

已知        前序加中序 ------>还原二叉树

                后序加中序 ------>还原二叉树

四、代码实现 

 1、前序遍历

void pre_order(tnode_t *proot)
{if(NULL == proot)return;printf("%c ",proot->data);pre_order(proot->pl);pre_order(proot->pr);
}

2、中序遍历

void mid_order(tnode_t *proot)
{if(!proot)return ;mid_order(proot->pl);printf("%c ",proot->data);mid_order(proot->pr);
}

3、后序遍历

void behind_order(tnode_t *proot)
{if(!proot)return ;behind_order(proot->pl);behind_order(proot->pr);printf("%c ",proot->data);
}

4、层序遍历

层序遍历中需要用到 队列 知识

void push_tree(tnode_t *proot)
{queue_t *que = create_queue();push_queue(que,proot);while(!is_empty_queue(que))  //判断队列是否为空,空返回1,非空为0{tnode_t *p;pop_queue(que,&p);printf("%c ",p->data);if(p->pl){push_queue(que,p->pl);} if(p->pr){push_queue(que,p->pr);}}printf("\n");destroy_queue(que);
}

5、获取二叉树的节点个数

int get_tree_node(tnode_t *proot)
{if(!proot)return 0;return get_tree_node(proot->pl) + get_tree_node(proot->pr) + 1;
}

6、获取二叉树的层数 

int get_tree_layer(tnode_t *proot)
{if(!proot)return 0;int cntl = get_tree_layer(proot->pl);int cntr = get_tree_layer(proot->pr);return cntl > cntr ? cntl + 1 : cntr + 1;
} 

 7、销毁二叉树

void destroy_tree(tnode_t *proot)
{if(!proot)return;destroy_tree(proot->pl);destroy_tree(proot->pr);free(proot);
}

 

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

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

相关文章

【Java】基于JWT+Token实现完整登入功能(原理+实操图解)

Java系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 文章目录 Java系列文章目录一、前言二、学习内容:三、问题描述四、解决方案:4.1 认识相关依赖4.1.1 工具包依赖4.1.2 非空注解依赖4.1.3 Token相关依赖4.1.4…

【正式版】深度技术Win10系统22H2最新版本:免费下载!

今日,系统之家小编给大家分享2024年最新发布的深度技术Win10正式版系统,该版本系统基于微软官方最新Windows10 22H2 19045.4842 64位专业版进行离线制作,确保安全无病毒,且修复了部分系统Bug,整体操作体验感更出色。系…

6.1排序——插入排序与希尔排序

本篇博客来梳理两种常见排序算法:插入排序与希尔排序 常见的排序算法如图 写排序算法的原则:先写单趟,再写整体 一、直接插入排序 1.算法思想 先假定第一个数据有序,把第二个数据插入;再假设前两个数据…

[【人工智能学习笔记】4_3 深度学习基础之卷积神经网络

卷积神经网络概述 卷积神经网络(Convolutional Neural Network, CNN)一种带有卷积结构的深度神经网络,通过特征提取和分类识别完成对输入数据的判别;在1989年提出,早期被成功用于手写字符图像识别;2012年更深层次的AlexNet网络取得成功,伺候卷积神经网络被广泛应用于各…

uniapp使用uni-popup做底部弹出选项(vue3)

效果图 页面代码 <!-- 发票筛选弹出框 --><uni-popup ref"popupRef" type"bottom" border-radius"10px 10px 0 0" background-color"#fff"><h4 style"text-align: center;margin-bottom: 20px;">发票筛…

node解析dxf文件

1、dxf数据说明 DXF是一种开放的矢量数据格式&#xff0c;可以分为两类&#xff1a;ASCII格式和二进制格式&#xff1b;ASCII具有可读性好的特点&#xff0c;但占用的空间较大&#xff1b;二进制格式则占用的空间小、读取速度快。由于AutoCAD是最流行的CAD系统&#xff0c;DXF也…

uniapp 懒加载、预加载、缓存机制深度解析

uniapp 懒加载、预加载、缓存机制深度解析 文章目录 uniapp 懒加载、预加载、缓存机制深度解析一、为什么要使用uniapp的懒加载、预加载和缓存机制二、如何使用uniapp的懒加载、预加载和缓存机制1. 懒加载2. 预加载3. 缓存机制 四、扩展与高级技巧1. 结合懒加载和预加载优化页面…

眼科市场格局固化,排名靠后的光正眼科还能逆袭吗?

眼科是A股的热门领域&#xff0c;也是医疗的黄金赛道。或许也正因为如此&#xff0c;这条赛道已经习惯了通过并购&#xff0c;利用资本杠杆跑马圈地。以最大规模的龙头爱尔眼科为首&#xff0c;并购是眼科的常规操作。 然而&#xff0c;真正观察赛道腰部及以下的公司&#xff…

elementUI根据列表id进行列合并@莫成尘

本文章提供了elementUI根据列表id进行列合并的demo&#xff0c;效果如图&#xff08;可直接复制代码粘贴&#xff09; <template><div id"app"><el-table border :data"tableList" style"width: 100%" :span-method"objectS…

2024.9.9营养小题【2】

营养&#xff1a; 1、什么数是丑数&#xff1f; 2、数学数学&#xff0c;丑数的数学意义&#xff0c;哎&#xff0c;数学思维我是忘干净了。 3、可以把while循环换成for循环。由此又想到了一点&#xff0c;三个循环结构各有使用场景。 for(;n%factors[i]0;n/factors[i]){}

网络编程day02(字节序、TCP编程)

目录 【1】字节序 1》大小端转换 2》端口转换 3》IP地址转换 主机字节序转换为网络字节序 &#xff08;小端序->大端序&#xff09; 网络字节序转换为主机字节序&#xff08;大端序->小端序&#xff09; 【2】TCP编程 1》流程 2》函数接口 1> socket 2> …

C# 删除Word文档中的段落

在编辑Word文档时&#xff0c;我们有时需要调整段落的布局、删除不必要的段落以优化文档的结构和阅读体验。本文将通过以下3个简单示例演示如何使用免费.NET库删除Word文档中的段落 。 目录 C# 删除Word中的指定段落 C# 删除Word中的所有段落 C# 删除Word中的空白段落 免费…

分组注解和自定义注解及分页查询

自定义注解的使用步骤 案例&#xff1a; 此时state需要进行的校验使用普通方式无法满足&#xff0c;需要我们根据需求进行自定义注解 创建一个注解 Documented//元注解 Retention(RetentionPolicy.RUNTIME)//元注解 Constraint(validatedBy {StateValidation.class}//指定提供…

网络编程day04(UDP、Linux IO 模型)

目录 【1】UDP 1》通信流程 2》函数接口 1> recvfrom 2> sendto 3》代码展示 1> 服务器代码 2> 客户端代码 【2】Linux IO 模型 场景假设一 1》阻塞式IO&#xff1a;最常见、效率低、不耗费CPU 2》 非阻塞 IO&#xff1a;轮询、耗费CPU&#xff0c;可以处…

Java后台生成二维码

一、效果图 二、实现代码 1.添加依赖 <!-- zxing生成二维码 --> <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.3.3</version> </dependency><dependency><grou…

大数据之Flink(四)

11、水位线 11.1、水位线概念 一般实时流处理场景中&#xff0c;事件时间基本与处理时间保持同步&#xff0c;可能会略微延迟。 flink中用来衡量事件时间进展的标记就是水位线&#xff08;WaterMark&#xff09;。水位线可以看作一条特殊的数据记录&#xff0c;它是插入到数…

机械学习—零基础学习日志(Python做数据分析02)

现在开始使用Python尝试做数据分析。具体参考的网址链接放在了文章末尾。 引言 我通过学习《利用Python进行数据分析》这本书来尝试使用Python做数据分析。书里让下载&#xff0c;anaconda&#xff0c;使用Jupyter来写代码&#xff0c;只是下载一个anaconda的确有点费时间&am…

计算机的发展史和基本结构

好久不见&#xff0c;粉粉们&#xff0c;我是#Y清墨。今天来分享一下最近学习做的笔记。 计算机发展史和四代计算机概述 阶段 年代 电子元件 运算速度&#xff08;每秒/次&#xff09; 第一代 1946-1958 真空电子管 数千至数万 第二代 1958-1964 晶体管 几十万至百万…

王道考研操作系统笔记(一)

虚拟内存的定义和特征&#xff1a; 基于局部性的原理&#xff0c; 在程序装入时&#xff0c;可以将程序中很快用到的部分装入内存&#xff0c;暂时用不到的数据装入外存&#xff0c;就可以让程序开始执行&#xff0c;在程序执行过程中&#xff0c;当所访问的信息不在内存的时…

更高级的主播美颜体验:直播美颜SDK的集成与开发方案详解

本篇文章&#xff0c;小编将详细解析如何通过直播美颜SDK实现更高级的主播美颜体验&#xff0c;并提供集成与开发的最佳方案。 一、直播美颜SDK的核心功能 直播美颜SDK是一种集成包&#xff0c;能够提供各种美颜功能&#xff0c;帮助主播在直播过程中实时调整面部特征&#…