数据结构与算法 二叉树的遍历

C语言实现二叉树的遍历(数据结构) 二叉树的定义 二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树 二叉树的性质 二叉树遍历 二叉树有三种遍历方式,分别为先序遍历、中序遍历、后序遍历 先序遍历: (1)先访问根节点。 (2)再访问左子树。 (3)最后访问右子树。 中序遍历: (1)先访问左子树。 . 阅读详情

先序遍历

遍历过程

  1. 访问根节点
  2. 先序遍历其左子树
  3. 先序遍历其右子树

示意图

先序遍历二叉树

代码实现

void PreOrderTraversal(BinTree BT)
{
  // 判断节点是否为空节点
  if(BT){
    //  这是要对节点中数据进行的操作
    printf("%d", BT->Data);
    //  递归遍历子节点
    PreOrderTraversal(BT->Left);
    PreOrderTraversal(BT->Right);
  }
}

中序遍历

遍历过程

  1. 中序遍历其左子树
  2. 访问根节点
  3. 中序遍历其右子树

示意图

在这里插入图片描述

代码实现

void InOrderTraversal(BinTree BT){
  if(BT){
    InOrderTraversal(BT->Left);
    print("%d", BT->Data);
    InOrderTraversal(BT->Right);
  }
}

后序遍历

遍历过程

  1. 后序遍历其为左子树
  2. 后序遍历其为右子树
  3. 访问根节点

示意图

在这里插入图片描述

代码实现

void PostOrderTraversal(BinTree BT){
  if(BT){
    PostOrderTraversal(BT->Left);
    PostOrderTraversal(BT-Right);
    printf("%d", BT->Data);
  }
}

先序、中序和后序遍历总结

  • 先序、中序和后序遍历过程:遍历过程中经过节点的路线一样,只是访问各个节点的时机不同。
  • 在下图↓中,入口到出口的曲线上用 ⊗、✰ 和 △ 三种符号分别标记出了先序、中序和后序访问各节点的时刻
    在这里插入图片描述

中序遍历非递归遍历算法

遍历过程

  • 遇到一个节点,就把它压栈,并去遍历它的左子树
  • 当左子树遍历结束后,从栈顶弹出这个节点并访问它
  • 然后按其右指针再去中序遍历该节点的右子树

代码实现

void InOrderTraversal(BinTree BT){
  BinTree T = BT;
  //  创建并初始化堆栈 S*
  Stack S = CreatStack(MaxSize);
  while(T || !IsEmpty(S)){
    //  一直向左并将沿途结点压入堆栈
    while(T){
      Push(S, T);
      T = T->Left;
    }
    if(!IsEmpty(S)){
      //  结点弹出堆栈
      T = Pop(S);
      //  (访问)打印结点
      printf("%d", T->Data);
      //  转向右子树
      T = T->Right;
    }
  }
}

层序遍历

遍历过程

  1. 从队列中取出一个元素
  2. 访问该元素所指的结点
  3. 若该元素所指结点的左、右子结点非空,则将其左、右子结点的指针顺序入队

示意图

在这里插入图片描述

代码实现

void LevelOrderTraversal(BinTree BT){
  Queue Q;
  BinTree T;
  //  若是空树则直接返回
  if(!BT) return;
  //  创建并初始化队列 Q
  Q = CreatQueue(MaxSize);
  AddQ(Q, BT);
  while(!IsEmptyQ(Q)){
    T = DeleteQ(Q);
    //  访问取出队列的结点
    printf("%d", T->Data);
    if(T->Left) Add(Q, T->Left);
    if(T->Right) Add(Q, T->Right);
  }
}

总结

二叉树遍历的核心问题:二维结构的线性化

  • 从结点访问其左、右子结点
  • 访问左子结点后,右子结点怎么办?
  1. 需要一个存储结构保存暂时不访问的结点
  2. 存储结构:堆栈、队列
2020-2021年度第二届全国大学生算法设计与编程挑战赛 (秋季赛)——正式赛 目录 B题-数位dp D题-兰德索尔杯-cup F题-大数据分析 G题-数学math H题-最大化 I题-小x的好路-road B题-数位dp 思路:写个方法判断一下就可以了,满足要求的就累加个数。AC代码如下: public class Main { public static void main(String[] args) { int ans = 0 ; for(int i=13930; i<=457439; i++){ 阅读详情

相关推荐

1224:最大子矩阵 2020-12-02

1224:最大子矩阵 时间限制: 1000 ms 内存限制: 65536 KB【题目描述】 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1×1)子矩阵。 比如,如下4×4的矩阵 0 −2 −7 0 9 2 −6 2 −4 1 −4 1 −1 8 0 −2 的最大子矩阵是 9 2 −4 −1 1 8 这个子矩阵的大小是15。【输入】 输入是一个N×N的矩阵。输入的第一行给出N(0<N≤100)。再后面的若干行中,依次(首先从左到右给出第一行的...

lybc2019的博客 1174

[PTA] 数据结构与算法题目集 6-8 求二叉树高度 & 6-9 二叉树的遍历

6.8 二叉树高度 int GetHeight(BinTree BT) { if (BT == NULL) return 0; int leftH = GetHeight(BT->Left); int rightH = GetHeight(BT->Right); if (leftH > rightH) r...

Rh's blog 355

python数据结构与算法2000讲 0094. 二叉树的中序遍历

描述:给定一个二叉树的根节点 root。 要求:返回该二叉树的中序遍历结果

IT 甄选推荐 916

C:勇敢羊羊不怕困难!2022-2023年度第四届全国大学生算法设计与编程挑战赛(秋季赛)之羊驼

2022-2023年度第四届全国大学生算法设计与编程挑战赛(应该是) 羊驼 纯路人啊没参赛!

weixin_52641967的博客 1354

机器学习笔记之玻尔兹曼机(一)基本介绍

在受限玻尔兹曼机——模型表示(Representation)一节中以玻尔兹曼机为引,介绍了受限玻尔兹曼机。从本节开始,将正式介绍玻尔兹曼机。相比于它的表示和推断过程,我们更关注它在求解过程中出现的问题。

静静的学习就好 7924

高精地图语义分割标注

什么是语义分割?语义分割与目标检测的区别?语义分割的关键应用场景有哪些?高精地图语义分割标注的难点?

weixin_52509513的博客 1645

数据结构与算法-二叉树遍历

概要基本概念研究二叉树遍历的必要性四种遍历方法前序遍历中序遍历后序遍历层序遍历 基本概念   二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。 研究二叉树遍历的必要性   如果我们用图形的方式来表现树的结构,应该说是非常直观和容易理解,但是对于计算机来说,它只有循环、判断等方式来处理,也...

破茧成蝶 3092

UE5新手必看:如何在UMG控件中嵌入浏览器实现Web页面展示(附完整步骤)

本文为UE5新手提供了在UMG控件中无缝集成Web浏览器的完整实战指南。详细介绍了从启用WebBrowser插件、创建并配置WebBrowser控件蓝图,到编写动态加载与交互逻辑,以及在游戏关卡中实例化UI的全过程。文章还分享了性能优化技巧与常见问题排查方法,帮助开发者高效实现游戏UI内的Web页面展示与交互。

weixin_29243063的博客 708

C语言数据结构和算法实验二:二叉树的遍历

C语言数据结构和算法实验二:二叉树的遍历前言问题描述问题基本判断参考代码(IDE:VisualStudio)输出结果 前言 题目来源:燕山大学经济管理学院数据结构与算法实验。 问题描述 任意给定一棵二叉树。试设计一个程序,在计算机中构造该二叉树,并对它进行遍历。 一棵二叉树的结点若无子树,则可将其子树看作 “.”,输入时,按照前序序列的顺序输入该结点的内容。对 下图,其输入序列为ABD…EH…CF...

Yota Togashi 1493

小米15修复“NV损坏” 去除主板校验电阻步骤解析与图示

小米15系列将搭载骁龙8至尊版处理器,采用台积电3nm工艺。文章分析了手机出现"NV损坏"故障的表现及修复方法,包括通信异常、系统启动问题等典型症状,并介绍了去除主板校验电阻和刷写工程固件两种修复方案。重点讲解了去除主板电阻后刷写QCN文件的操作流程,强调在维修过程中需要结合分析与思考。适用于小米15系列特定机型(24129PN74G/I/C)的硬件修复。

小马哥的专栏 311

OpenClaw实战系列01:OpenClaw接入飞书机器人全接入指南 + Ollama本地大模型

通过 OpenClaw + Ollama + 飞书的组合,我们成功搭建了一个完全私有、免费、可定制的AI助理。它不仅能在日常聊天中提供帮助,还能通过OpenClaw强大的“技能”体系,真正去操作你的电脑、管理文件、甚至执行代码。这套方案将数据留在本地,既保证了隐私安全,又锻炼了动手能力。现在,去给你的AI助理添加更多酷炫的技能吧!

PeterPan的博客 1万+

数据结构与算法-二叉树的遍历

数据结构与算法-二叉树的遍历

qq_73121173的博客 824

AI Agent在智能腰带中的姿势矫正与提醒

随着人们生活方式的改变,长时间不正确的坐姿、站姿等不良姿势问题日益普遍,这不仅会导致身体疲劳,还可能引发颈椎病、腰椎病等多种健康问题。智能腰带作为一种可穿戴设备,具有实时监测人体姿势的潜力。本研究的目的是将AI Agent引入智能腰带,实现对人体姿势的准确识别、矫正与提醒功能。本研究的范围涵盖了从AI Agent的核心算法原理到智能腰带的实际开发与应用。包括传感器数据的采集与处理、机器学习算法的选择与训练、智能腰带的硬件设计与软件开发,以及在不同场景下的实际应用测试。本文共分为十个部分。

AI 原生应用开发的博客 341

【数据结构与算法】二叉树的递归遍历

二叉树的递归遍历 定义树节点 //定义节点 typedef struct node { struct node *lchild; struct node *rchild; char data; }BiTreeNode, *BiTree;//*BiTree的意思是给 struct node*起了个别名,叫BiTree,故BiTree为指向节点的指针。 按照前序顺序创建二叉树 //按照...

程序媛养成记 4079

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341)

[ vulhub漏洞复现篇 ] Drupal XSS漏洞 (CVE-2019-6341) Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。Drupal在某些情况下,通过文件模块或者子系统上传恶意文件触发XSS漏洞。

qq_51577576的博客 2207

人工智能大模型原理与应用实战:AI模型转换为API的步骤和方法

传统的开发模式下,构建复杂的软件系统是非常费时费力的,而通过云计算、微服务等技术手段可以实现快速部署、弹性扩展的能力。在这种背景下,越来越多的公司将重点转移到研发人员的产品思维上,希望能够将自己的AI模型转换为一个可供他人调用的API接口。但是对于许多从事AI领域的研发人员来说,如何将自己的AI模型转换为API是一个比较棘手的问题。在这篇文章中,作者将从AI模型转换为API的过程分为以下几个步骤:AI模型准备阶段——模型选择、数据准备、模型训练。

AI天才研究院 2598

数据结构与算法:二叉树的中序遍历(递归与非递归方法)

数据结构与算法:二叉树的中序遍历(递归与非递归方法) public class BinaryTree<E> { private TreeNode<E> root; //根节点 private List<TreeNode> nodeList = null; //二叉树节点的链式结构 public BinaryTree()...

樊凯的博客 1048

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

有趣的数据结构算法15——二叉树的先序遍历、中序遍历和后序遍历

有趣的数据结构算法15——二叉树的先序遍历、中序遍历和后序遍历遍历的种类深度遍历的实现先序遍历中序遍历后序遍历实现代码GITHUB下载连接 创建完二叉树了,真的猛士就应该开始遍历了! 遍历的种类 二叉树是一种非常重要的数据结构。对于二叉树,存在深度遍历和广度遍历两种类的便利结构。 深度遍历有前序遍历、中序遍历以及后序遍历三种遍历方法, 广度遍历代表的是常见的层次遍历。 对于深度遍历而言,结合树的...

Bubbliiiing的学习小课堂 4516

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数据结构 《22》---- 二叉树三种遍历的迭代器算法

二叉树的三种遍历有递归版本,和迭代版本。本文介绍一种新的思路。 参考了 http://coolshell.cn/articles/9886.html 在许多应用中,我们还需要对遍历本身进行抽象。假如有一个求和的函数sum,我们希望它能应用于链表,数组,二叉树等等不同的数据结构。这时,我们可以抽象出迭代器(Iterator)的概念,通过迭代器把算法和数据结构解耦了,使得通用算法能应用于不同类

L.J.SHOU的专栏 3622

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【数据结构与算法】二叉树遍历

搜索二叉树概念 二叉树是树的特殊一种,具有如下特点: 1、每个结点最多有两颗子树,结点的度最大为2。 2、左子树和右子树是有顺序的,次序不能颠倒。 3、即使某结点只有一个子树,也要区分左右子树。 搜索二叉树 递归遍历 前序遍历 基本思想:先访问根结点,再先序遍历左子树,最后再先序遍历右子树即根—左—右。 public static void p...

SmallCatBaby的博客 238

【数据结构与算法】 遍历二叉树

遍历:左右顺序始终是先左后右,只是中间的顺序,前 :中就在前,中:中就在中,后:中就在后前序遍历:中左右中序遍历:左中右后序遍历:左右中。

lihaoweiwudi_的博客 377

【数据结构与算法】二叉树的非递归前中后序遍历

二叉树的前中后遍历如果采取递归的方式来实现,是相当容易的事情。递归之所以强大,是因为有系统自动压栈。那么非递归的前中后序遍历就是借助栈,通过我们自己手动压栈来实现二叉树的遍历。

joy.728的博客 1457

数据结构-二叉树遍历的非递归算法

首先针对于严慧敏版本的《数据结构》中关于非递归算法的描述:

xhoo 的博客 819

【数据结构与算法】二叉树广度遍历

二叉树的广度遍历想想还是比较简单的,利用队列存储当前结点的左儿子和右儿子用作未来的访问。 代码实现 /** * 源码名称:TreeBFS.java * 日期:2014-08-25 * 程序功能:二叉树广度遍历 * 版权:CopyRight@A2BGeek * 作者:A2BGeek */ import java.util.LinkedList; import java.u

A2BGeek的专栏 1186

数据结构与算法:二叉树的先序遍历(递归与非递归方法)

数据结构与算法:二叉树的先序遍历(递归与非递归方法) public class BinaryTree<E> { private TreeNode<E> root; //根节点 private List<TreeNode> nodeList = null; //二叉树节点的链式结构 public BinaryTree(...

樊凯的博客 1272

建立中序线索链表算法_【数据结构——遍历二叉树和线索二叉树】

【数据结构——遍历二叉树和线索二叉树】目录【数据结构——遍历二叉树和线索二叉树】一、遍历二叉树(一)遍历的三种规则1、先序遍历2、中序遍历3、后序遍历(二)遍历的相关算法1、先序遍历建立二叉链表2、统计二叉树中叶子结点的个数3、求二叉树的深度4、复制二叉树5、统计二叉树中结点的个数二、线索二叉树1、相关概念2、中序线索化算法3、遍历中序线索二叉树一、遍历二叉树遍历的定义——指按某条搜索路...

weixin_29959615的博客 2278
上一篇: 数据结构与算法 二分查找法
下一篇: 刷题 逆序的三位数
Huber Wong
博客等级 码龄6年 117粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huber Wong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值