二叉树的递归遍历

C语言实现二叉树的递归遍历与非递归遍历 本文实现了对二叉树的递归遍历和非递归遍历,当然还包括了一些栈操作。           二叉树的遍历本质上其实就是入栈出栈的问题,递归算法简单且容易理解,但是效率始终是个问题。非递归算法可以清楚的知道每步实现的细节,但是乍一看不想递归算法那么好理解,各有各的好处吧。接下来根据下图讲讲树的遍历。           1、先序遍历:先序遍历是先输出根节点,再输出左子树,最后输出右子树。 阅读详情
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
struct node
{
    struct node * lchild;
    struct node * rchild;
    int data;
}node;
typedef struct node * BTREE;
/*BTREE CreateBT(int v,BTREE ltree,BTREE rtree)
{
    BTREE root;
    root=(BTREE)malloc(sizeof(node));
    root->data=v;
    root->lchild=ltree;
    root->rchild=rtree;
    return root;
}*/
void CreateBT(BTREE &T)//创建二叉树
{
    char ch;
    scanf("%c",&ch);
    if(ch=='#')
    {
        T=NULL;


    }
    else
    {
        T=(BTREE)malloc(sizeof(node));
        if(T==NULL)
        {
            return;
        }
        T->data=ch;
        CreateBT(T->lchild);
        CreateBT(T->rchild);
    }
    return;


}
void PreOrder(BTREE T)//先序遍历
{
    if(T==NULL)
    {
        return;
    }
    printf("%c",T->data);
    PreOrder(T->lchild);
    PreOrder(T->rchild);


}
void InOrder(BTREE T)//中序遍历
{
    if(T==NULL)
    {
        return;
    }


    InOrder(T->lchild);
    printf("%c",T->data);
    InOrder(T->rchild);


}
void PostOrder(BTREE T)//后序遍历
{
    if(T==NULL)
    {
        return;
    }
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%c",T->data);


}


int main()
{
     BTREE A;
     printf("按先序序列输入结点序列,'#'代表空:");
     CreateBT(A);
     printf("先序遍历节点的结果为:");
     PreOrder(A);
     printf("中序遍历节点的结果为:");
     InOrder(A);
     printf("后序遍历节点的结果为:");
     PostOrder(A);


    return 0;
}




二叉树递归与非递归遍历 二叉树的遍历 常见的二叉树的遍历有三种方式:先序遍历(根结点,左子树,右子树) 中序遍历(左子树,根结点,右子树)    后续遍历(左子树,右子树,根结点) 这三种方式有分别可以用递归和非递归来实现 先序遍历的主要步骤:(参考下图) 1.从根结点开始先压左路结点,并访问结点,直到把根结点和左路结点全部压入栈。 2.若左子树和为空,说明左路和根结点已经全部压栈并且已经访问过了,开始取栈顶元素来访问上一层父节点的右子树。把 右子树看成子问题继续进行1步骤。 3.依次进行上述1和2 阅读详情

相关推荐

二叉树遍历——递归与非递归实现

二叉树遍历——递归与非递归实现描述分析递归版本的二叉树遍历设计代码非递归版本的二叉树遍历非递归先序遍历设计步骤代码非递归后序遍历设计步骤代码非递归中序遍历设计步骤代码非递归遍历二叉树完整代码及测试 描述 实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式。 分析 使用递归实现二叉树遍历十分容易。在递归过程中,系统自动帮你压栈从而回溯时,关键信息不会被丢失。而非递归实现二叉树遍历时,无法再依...

jjy223404的博客 1048

带你图解二叉树的多种递归遍历(建议收藏!!)

文章目录二叉树的构建结点类型的定义构建二叉树之间的关系深度优先遍历前序遍历代码实现图解递归(由于图片大小问题,建议用手机客户端查看,以下图解也是)中序遍历代码实现图解递归后序遍历代码实现图解递归广度优先遍历层序遍历代码实现 二叉树的构建 为了实现二叉树的遍历,我们要先构建一个二叉树,这里就先简单构建一个。 结点类型的定义 既然是链式二叉树,那必须得有自己的结点类型,以下是链式二叉树结点类型的定义 typedef char BTDataType; typedef struct BinaryNode {

IamGreeHand的博客 7739

二叉树遍历的流程图(递归+非递归+前中后序)

辛辛苦苦画的图啊,才两分,便宜你们了~ppt格式的,可以随便改哦~

二叉树的遍历(非递归)

title: Binary Tree Traversal date: 2020-09-27 categories: 数据结构与算法 tags: 二叉树 二叉树的遍历 1. 递归方法 递归方法比较简单,不过多赘述,直接看代码: public class BinaryTreeTraversal { //先序遍历 public void preOrder(TreeNode root){ if(root==null)return; System.out.print.

zjzj95的博客 502

STM32Cubemx+CanFestival:从零到一的CANopen移植实战

本文详细介绍了如何使用STM32CubeMX和CanFestival实现CANopen协议栈的移植,从开发环境搭建到核心配置步骤,再到调试与问题排查。通过实战经验分享,帮助开发者快速掌握STM32与CANopen的结合应用,提升嵌入式系统开发效率。

weixin_42558093的博客 418

记一次完整的RPG Maker MV游戏逆向过程(思路一)

了解RPG Maker MV的文件建构 上一篇文章,我们已经成功在PC上运行了游戏,那我们如何对游戏进行逆向呢? 首先要了解正常的RPG Maker MV制作的游戏应该具有哪些文件,以及他的结构 那如何了解他的结构呢,很简单,我们只需要用RPG Maker MV创建一个默认工程,来看看一个游戏的最简结构是怎么样的 创建新项目 项目创建完成 查看项目目录结构 是不是和之前解包出来的很像呢? 通...

Ciiiiiing的博客 1万+

三分钟带你快速实现二叉树的递归遍历

写在前面: 上一篇文章中我们聊到了队列——漫画趣解——队列 相信很多小伙伴都知道了如何实现队列; 那么这次,时光同样采用漫画形式, 给大家聊一聊什么是二叉树,如何实现二叉树的递归遍历; 思维导图: 什么是树? 树是一种非线性结构,有一个直接前驱,但可能有多个直接后继(1:n); 树的定义具有递归性,树中还有树; 树可以为空,即结节点个数为0; 如图: ...

程序员的时光 1768

开关电源辅助电源设计全流程拆解

地类型定义包含电路功率地(PGND)高压侧地,与主功率电路地相连整流桥负极、原边电感地、UC3842的功率地信号地(SGND)低压侧地,与控制/采样电路地相连副边整流管地、TL431地、MCU/运放地。

lyzh971103的博客 1468

二叉树递归遍历的图示

以二叉树的后序遍历为例。 后序遍历的递归代码如下 class Solution { List<Integer> ans = new LinkedList<>(); public List<Integer> postorderTraversal(TreeNode root) { if (root == null) return an...

qq_29168809的博客 850

Wider Face+YOLOV7人脸检测

使用Wider Face数据集训练YOLOV7

chen_znn的博客 8406

PostgreSQL隐式类型转换全解析:告别operator does not exist

强类型数据库是现代数据系统的基石,它在带来严谨性的同时,也常常让开发者在类型不匹配报错前束手无策。当一条SQL因bigint与text比较而抛出operator does not exist时,根源往往在于对数据库隐式转换规则的误解。PostgreSQL通过pg_cast系统表将转换划分为隐式、赋值与显式三个级别,并依据操作符解析逻辑决定是否自动提升类型。理解这些机制,不仅能快速定位JOIN、UNION、函数调用等场景下的类型错误,还能帮助开发者合理使用EXPLAIN VERBOSE、pg_typeof等工

weixin_29587015的博客 304

详解二叉树的非递归遍历

本文转载自:http://blog.youkuaiyun.com/zhangxiangdavaid/article/details/37115355 前言   对于二叉树的递归遍历比较简单,所以本文主要讨论的是非递归版。其中,中序遍历的非递归写法最简单,后序遍历最难。 节点的定义: //Binary Tree Node typedef struct node { int data; ...

编程随笔与杂谈 10万+

Win11+Ubuntu18.04+Ubuntu20.04三系统安装与卸载

以下情况均为个人情况:1.插入启动 U 盘后,登录时可以按F12(拯救者Y7000,不同电脑不同)进入BIOS,选择从启动盘启动。2.。3.5.在win基础上,安装第一个Ubuntu系统后,系统启动界面类似如下第一张图,Ubuntu不显示版本号。安装第二个Ubuntu系统后,系统启动界面如下第二张图,如果想更改启动项的名称,可自行查阅相关资料。

weixin_61686291的博客 2536

二叉树,二叉树的归先序遍历,中序遍历,后序遍历,递归和非递归实现

1)递归序,3次见面,第一次见面打印叫先序遍历,第二次见面打印叫中序遍历,第三次见面打印叫后序遍历 2)非递归实现中,先序和后序是相反的,但是中序遍历挺难理解,但是核心思想也就是先去左树,再打印头,然后再去右树。 3)笔试求AC,可以不考虑空间复杂度,但是面试既要考虑时间复杂度最优,也要考虑空间复杂度最优。

weixin_46838716的博客 7748

AI Agent开发第82课-手把手教你把paddleocr-vl做成mcp使其在DIFY里运行

本文详解如何将国产顶尖多模态 OCR 模型 PaddleOCR-VL 封装为标准 MCP(Model Calling Protocol)服务,并通过自研的 HTTP-based MCP Client 接入 Dify 1.10,实现 AI Agent 在对话中自动识别并调用 OCR 能力。该方案已在某头部保险公司真实业务流程中落地,使用了当前最先进的“Agentic AI 原生”设计思想。

打造全国最全的AI Agent开发知识领域的博客 1625

Python爬虫实战:如何爬取汽车之家报价信息

本文通过实战介绍了如何使用Python编写爬虫,抓取汽车之家网站的车型、价格、配置等信息。在爬虫实现过程中,我们使用了requests库来发送HTTP请求,使用解析HTML页面,提取嵌入的JSON数据,并将数据存储到CSV文件中。同时,我们还介绍了如何使用反爬虫策略(如随机User-Agent、请求延时、代理池等)来规避反爬虫机制,确保爬虫的稳定性。

2201_76125261的博客 1594

二叉树递归遍历与非递归遍历

二叉树递归遍历与非递归遍历 二叉树递归遍历与非递归遍历 引言 递归式遍历 前序遍历 中序遍历 后序遍历 非递归式遍历 前序遍历 中序遍历 后序遍历 一种更简单的非递归式遍历 前序遍历 中序遍历 后序遍历 引言 由于二叉树是由递归定义的一种数据结构,因此递归式遍历也就是最符直觉的一种遍历方式。此外,由于递归的简洁性以及三种递归的高度统一,因此递归式遍历也是容

2614

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

详解二叉树的递归遍历与非递归遍历——(二)

非递归遍历    上一边文章中,咱们谈到了二叉树的递归遍历,也是十分的简单哈,这回又继续将非递归遍历写一下。从前序开始扯吧,哈哈!!! 先给出存储结构: typedef struct Node{       int data; //保存节点中的值     ...

一扣解千愁的博客 3615

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

二叉树的遍历的递归与非递归算法

看了以上三种方式遍历二叉树的例子,应该就能明白三种遍历方式的本质与区别,其实我们可以看出,无论以何种方式,我们只要把握好访问的顺序,并且将每一个根结点下的子树都看成一个新树,再按照某种遍历方式访问这个这个新树即可!例子:中缀表达式转后缀表达式;(前缀表达式:波兰表达式;后缀表达式:逆波兰表达式)前缀表达式:-+a*bc/de(也就是以先序遍历访问上述二叉树的顺序)中缀表达式:a+b*c-d/e(也就是以中序遍历访问上述二叉树的顺序)

cx330的博客 2380

详解二叉树的递归遍历与非递归遍历

二叉树的遍历 所谓二叉树的遍历,是指按某条搜索路径访问树中的每个节点,使得每个节点均被访问一次,而且仅被访问一次。 遍历二叉树需要决定对根节点N、左子树L、右子树R的访问顺序(按照先遍历左子树在遍历右子树的原则),常见的遍历次序有先序(NLR)、中序(LNR)、后序(LRN)三种遍历算法,这也是最常见的二叉树遍历算法。 其中的“序”实际上就是根节点的访问时机。 1. ...

一扣解千愁的博客 8434

二叉树的递归和非递归遍历

二叉树递归和非递归遍历

bubbleyang的博客 3214

二叉树遍历之递归算法

二叉树的遍历算法有多种,典型的有先序遍历、中序遍历、后序遍历以及层序遍历。而且这些遍历的递归算法较为简单,代码很少,容易实现,本文就是汇总二叉树遍历的递归算法,非递归算法将在下一篇文章中进行总结。本文中用到的二叉树实例如下: 3 / \ 9 20 / \ 15 7 二叉树定义和辅助函数如下: struct node {

__七把刀__ 1万+

二叉树的遍历(递归和非递归)

了解二叉树中遍历的方法以及实现,其中包括递归算法和非递归

chenjia0512的博客 2173
上一篇: AVL树的旋转分析与实现
下一篇: 线索二叉树
付家明1
博客等级 码龄14年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值