链式二叉树(1)

目录

二叉树的概念&结构

二叉树的遍历概念

手写二叉树测试

二叉树遍历实现代码

递归图解

前序遍历递归图解

中序序遍历递归图解

后续遍历递归图解


二叉树的概念&结构

二叉树是

  • 空树
  • 非空:根节点,根节点的左子树、根节点的右子树组成的
  • 二叉树定义是递归式的,因此后序基本操作中基本都是按照该概念实现的。

二叉树的遍历概念

学习二叉树结构,最简单的方式就是遍历。

二叉树遍历(Traversal):是按照某种特定的规则,依次对二叉树中的节点进行相应的操作,并且每个节点只操作一次。访问结点所做的操作依赖于具体的应用问题。 遍历是二叉树上最重要的运算之一,也是二叉树上进行其它运算的基础。

 

按照规则,二叉树的遍历有:前序/中序/后序的递归结构遍历。

  • 前序遍历(Preorder Traversal 亦称先序遍历):访问根结点的操作发生在遍历其左右子树之前。
  • 中序遍历(Inorder Traversal):访问根结点的操作发生在遍历其左右子树之中(间)。
  • 后序遍历(Postorder Traversal):访问根结点的操作发生在遍历其左右子树之后。
  • 由于被访问的结点必是某子树的根,所以N(Node)、L(Left subtree)和R(Right subtree)又可解释为根、根的左子树和根的右子树
  • NLR、LNR和LRN分别又称为先根遍历、中根遍历和后根遍历。
  • ❗注意:遍历到NULL才不往下走(而不是到叶子节点就停住)
  • 前序遍历:根 左 右
  • 中序遍历:左 根 右
  • 后续遍历:左 右 根

请写出下面二叉树的前/中/后的遍历顺序! 

手写二叉树测试

在学习二叉树的基本操作前,需先要创建一棵二叉树,然后才能学习其相关的基本操作。由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。

注意:下述代码并不是创建二叉树的方式,真正创建二叉树方式后序详解重点讲解。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>//二叉树节点结构体
typedef int BTDataType;
typedef struct BinaryTreeNode
{BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right;
}BTNode;//手动建造一个二叉树
//放入数据,左右置为NULL
BTNode* BuyNode(int x)
{BTNode* tmp = (BTNode*)malloc(sizeof(BTNode));assert(tmp);if (tmp == NULL){perror("malloc fail");return;}tmp->data = x;tmp->left = NULL;tmp->right = NULL;return tmp;
}//放入数据链接成树
BTNode* CreatBinaryTree()
{BTNode* node1 = BuyNode(1);BTNode* node2 = BuyNode(2);BTNode* node3 = BuyNode(3);BTNode* node4 = BuyNode(4);BTNode* node5 = BuyNode(5);BTNode* node6 = BuyNode(6);//BTNode* node7 = BuyNode(1);node1->left = node2;node1->right = node4;node2->left = node3;node4->left = node5;node4->right = node6;return node1;
}

二叉树遍历实现代码

// 二叉树前序遍历
void PreOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}printf("%d ", root->data);//根PreOrder(root->left);//左PreOrder(root->right);//右
}//中序
void InOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}InOrder(root->left);//左printf("%d ", root->data);//根InOrder(root->right);//右
}//后序
void PostOrder(BTNode* root)
{if (root == NULL){printf("N ");return;}PostOrder(root->left);//左PostOrder(root->right);//右printf("%d ", root->data);//根
}int main()
{BTNode* node = CreatBinaryTree();// 二叉树前序遍历PreOrder(node);printf("\n");// 二叉树中序遍历InOrder(node);printf("\n");// 二叉树后序遍历PostOrder(node);}

 

  • 前序遍历结果:1 2 3 4 5 6
  • 中序遍历结果:3 2 1 5 4 6
  • 后序遍历结果:3 2 5 6 4 1 

递归图解

  • 结合函数栈帧理解(更好的理解函数调用的过程)函数栈帧的创建与销毁-CSDN博客
  • 函数递归回顾。C语言之函数递归篇_c语言递归写法-CSDN博客
  • 画图理解!! 

前序遍历递归图解

 

 

中序序遍历递归图解

后续遍历递归图解

🙂感谢大家的阅读,若有错误和不足,欢迎指正

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

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

相关文章

3ASC25H216A DATX132

3ASC25H216A DATX132 3ASC25H216A DATX132 3ASC25H216A DATX132在DAQ应用中使用非隔离DC/DC电源降压模块的优势 "... 图3&#xff1a;德州仪器电源模块电感HTS性能 此外&#xff0c;我们的电源 ... 响应。 图4&#xff1a;功率模块效率和负载瞬态响应 若保持 ...…

Java设计模式-组合模式(13)

大家好,我是馆长!今天开始我们讲的是结构型模式中的组合模式。老规矩,讲解之前再次熟悉下结构型模式包含:代理模式、适配器模式、桥接模式、装饰器模式、外观模式、享元模式、组合模式,共7种设计模式。 组合模式(Composite Pattern) 定义 组合(Composite)模式:又叫…

【开源】基于Qt5的ROS1/ROS2人机交互软件(支持地图编辑/多点导航)

本项目基于Qt5开发&#xff0c;基于CMake进行构建&#xff0c;可以实现一套代码同时在ROS1/ROS2系统中使用(本项目已接入CI,保证多ROS版本/系统版本可用性) 项目地址&#xff1a; https://github.com/chengyangkj/Ros_Qt5_Gui_App 软件在编译时会自动识别环境变量中的ROS1/ROS…

如何对视频进行翻译

下载视频和翻译软件 视频和翻译软件点击下载就行了&#xff0c;下载之后解压&#xff0c;然后把两个exe点一下。接下来如果资金充裕或者要求比较高的可以使用各个api&#xff0c;网站里有视频介绍了。 经济适用视频翻译 原理简析 首先这个软件对视频的翻译的流程大致如下&a…

2.4G SOC收发芯片XL2412P,适用于无线键鼠,遥控器等多种场景

XL2412P芯片是-款高性能低功耗的SOC集成无线收发芯片,集成MO核MCU,工作在2.400~2.483GHz世界通用ISM频段。该芯片集成了射频接收器、射频发射器、频率综合器、GFSK 调制器、GFSK解调器等功能模块,并且支持一对多线网和带ACK的通信模式。发射输出功率、工作频道以及通信数据率均…

C语言的预编译:加速编译过程和优化代码性能的关键步骤

概念 预编译是编译器在实际编译源代码之前执行的一个关键步骤。通过预编译&#xff0c;编译器可以在编译过程中进行必要的处理和优化&#xff0c;以提高编译速度和代码的执行性能。预编译阶段主要包括宏替换、头文件包含、条件编译等操作。本文将介绍预编译的基本概念和常用的…

【GameFramework框架】一、框架介绍

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog…

本地socket通信

bilibili 就业班视频搬运 p55 1.作用 本地进程通信使用。 2. 类型 2.1 面向连接的&#xff0c;类似于TCP &#xff08;但不是TCP 呀&#xff01;这里不需要什么协议了&#xff01;&#xff09; socket函数的第二个参数填写 SOCK_STREAM int sfd socket(AF_UNIX, SOCK_…

大模型相关术语

AGI&#xff08;Artificial General Intelligence&#xff09; 指通用人工智能&#xff0c;专注于研制像人一样思考、像人一样从事多种用途的机器。它与一般的特定领域智能&#xff08;如机器视觉、语音识别等&#xff09;相区分。 AIGC&#xff08;AI-Generated Content&…

tableau绘制雷达图

目标图形: 1. 数据准备 &#xff08;1&#xff09;原始数据 你要进行用雷达图比较的对象的各指标的数据。 (2) 处理后数据 在原数据的基础上添加对各指标进行区间的划分数据&#xff0c;也就是层级的划分。 2. 操作步骤 &#xff08;1&#xff09;数据转化 转化前&#xf…

Backtrader 文档学习- Broker - Cheat-On-Open

Backtrader 文档学习- Broker - Cheat-On-Open 1.概述 V1.9.44.116增加了Cheat On Open的支持。对于全押的人来说&#xff0c;这似乎是一个必需的功能&#xff0c;用bar的收盘价后进行计算&#xff0c;希望与开盘价相匹配。 当开盘价差距&#xff08;上涨或下跌&#xff0c;取…

streampark+flink一键整库或多表同步mysql到doris实战

streamparkflink一键整库或多表同步mysql到doris实战&#xff0c;此应用一旦推广起来&#xff0c;那么数据实时异构时&#xff0c;不仅可以减少对数据库的查询压力&#xff0c;还可以减少数据同步时的至少50%的成本&#xff0c;还可以减少30%的存储成本&#xff1b; streampar…

Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建

Vue.js 学习14 集成H265web.js播放器实现webpack自动化构建 一、项目说明1. H265web.js 简介2. 准备环境 二、项目配置1. 下载 H265web.js2. 在vue项目里引入 H265web3. 设置 vue.config.js 三、代码引用1. 参照官方demo &#xff0c; 创建 executor.js2. 在 vue 页面里引用htm…

MongoDB数据库自动备份脚本

1.编写备份脚本 #!/bin/bash #backup MongoDB #mongodump 数据库备份echo "-----------数据库备份开始-------------" #数据库mongodump备份工具 DUMP/home/dbbackup/mongodb4.4/bin/mongodump #临时备份目录 OUT_DIR/home/dbbackup/mongodb_bak_now #历史备份列表…

K8S网络

一、介绍 k8s不提供网络通信&#xff0c;提供了CNI接口(Container Network Interface&#xff0c;容器网络接口)&#xff0c;由CNI插件实现完成。 1.1 Pod通信 1.1.1 同一节点Pod通信 Pod通过虚拟Ethernet接口对&#xff08;Veth Pair&#xff09;与外部通信&#xff0c;Veth…

有向图查询所有环,非递归

图&#xff1a; 有向图查询所有环&#xff0c;非递归&#xff1a; import java.util.*;public class CycleTest {private final int V; // 顶点数private final List<List<Integer>> adjList; // 邻接表public CycleTest(int vertices) {this.V vertices;this.…

C++ : 类的简单介绍(四)——析构函数

概念&#xff1a; 与构造函数功能相反&#xff0c;析构函数不是完成对对象本身的销毁&#xff0c;局部对象销毁工作是由 编译器完成的。 而对象在销毁时会自动调用析构函数&#xff0c;完成对象中资源的清理工作。 特征&#xff1a; 1. 析构函数名是在类名前加上字符 ~ 2. …

java+springboot电影订票选座及评论网站影评系统ssm+vue

广大观影消费者需要知道自己的空闲时间&#xff0c;在自己可以接受的地理距离范围内&#xff0c;是否有感兴趣的影片可供观看&#xff0c;也需要清楚哪家影院在销售自己需要的电影票&#xff1b;同时手握电影排期及上映信息的电影院的运营者也急需根据消费者的观影需求实时调整…

C++中的结构体内存对齐规则及原因

一、结构体内存对齐规则 1.第一个成员在结构体偏移量为0的地址处 2.其他成员变量要对齐到对齐数的整数倍地址处&#xff08;对齐数 min&#xff08;对齐数&#xff0c;变量大小&#xff09;&#xff09; &#xff08;VS下默认对齐数为8&#xff0c;也可以自定义对齐数&#…

【笔记】CSDN文本编辑操作(持续更新中......)

文章目录 1、修改字体颜色和字号2、首行悬进两个字符3、图片居中4、字体、文字颜色、居中5、高亮6、重点标注7、加粗 1、修改字体颜色和字号 <html><head><meta http-equiv"Content" content"text/html;charsetutf-8" /><title>修…