二叉树遍历的递归算法程序

Docker网络教程(四)macvlan 网络教程 在这种网络下,Docker 宿主机在它的IP之上,允许接受多个 MAC 地址的请求,然后再将这些请求路由至对应的容器里。流通,Docker 会用它的 MAC 地址,把流量路由进你的容器里。对于网络上的网络设备来说,你的容器似乎是物理上连接到网络上的。),Docker使用其MAC地址将流量路由到你的容器。对于网络上的网络设备来说,你的容器似乎是物理上连接到网络上的。你需要 3.9 或者更高版本的 Linux 内核,4.0 以及以上的版本是更好的。如果你的设备叫别的名字,用对应的名字代替。 阅读详情
二叉树的遍历是典型的递归算法。所谓树的遍历是指按某条搜索路径访问树中每个结点,使得每个结点均被访问一次,而且仅被访问一次。我的程序给出了二叉树的先序遍历,中序遍历,后序遍历和求二叉树的深度。程序如下: 

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAX(a,b) (a>b?a:b)

typedef char TElemType;
typedef int Status;

//二叉树的二叉链表存储结构
typedef struct BiTNode{
  TElemType data;
  struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//先序遍历生成二叉树
Status CreatBiTree(BiTree &T){ 
  TElemType ch,temp;
  printf("输入一个元素: ");
  scanf("%c",&ch);
  temp=getchar(); //结束回车
  if(ch==' ') T=NULL; //输入空格表示结点为空树
  else{
    if(!(T=(BiTree)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
    T->data=ch; //生成根结点
    CreatBiTree(T->lchild); //构造左子树
    CreatBiTree(T->rchild); //构造右子树
  }
  return OK;
}

//打印元素
Status PrintElem(TElemType e){
  printf("%c ",e);
  return OK;
}

//先序遍历二叉树
Status PreOrderTraverse(BiTree T,Status (* Visit)(TElemType e)){
  if(T){ //二叉树不为空时 
    if(Visit(T->data)) //访问根结点
      if(PreOrderTraverse(T->lchild,Visit)) //先序遍历左子树
        if(PreOrderTraverse(T->rchild,Visit)) return OK; //先序遍历右子树
    return ERROR;
  }
  else return OK;
}

//中序遍历二叉树
Status InOrderTraverse(BiTree T,Status (* Visit)(TElemType e)){
  if(T){
    if(InOrderTraverse(T->lchild,Visit))
      if(Visit(T->data))
        if(InOrderTraverse(T->rchild,Visit)) return OK;
    else return ERROR;
  }
  return OK;
}

//后序遍历二叉树
Status PostOrderTraverse(BiTree T,Status (* Visit)(TElemType e)){
  if(T){
    if(PostOrderTraverse(T->lchild,Visit))
      if(PostOrderTraverse(T->rchild,Visit))
        if(Visit(T->data)) return OK;
    else return ERROR;
  }
  return OK;
}

//求二叉树的深度
int BiTreeDepth(BiTree T){
  if(!T) return 0; //二叉树为空树时
  int Dl=0,Dr=0;
  if(T->lchild) Dl=BiTreeDepth(T->lchild); //求左子树深度
  if(T->rchild) Dr=BiTreeDepth(T->rchild); //求右子树深度
  return MAX(Dl,Dr)+1;
} 

//主函数
void main()
{
  BiTree T;
  Status (* Visit)(TElemType);
  Visit=PrintElem;
  CreatBiTree(T);
  printf("/n先序遍历:");
  PreOrderTraverse(T,Visit);
  printf("/n中序遍历:");
  InOrderTraverse(T,Visit);
  printf("/n后序遍历:");
  PostOrderTraverse(T,Visit);
  printf("/n二叉树深度为%d",BiTreeDepth(T));
  printf("/n程序结束./n");
}

输出结果为(红色为键盘输入的数据,输入的空格没有显示出来):

输入一个元素: A
输入一个元素: B
输入一个元素: C
输入一个元素:  
输入一个元素:  
输入一个元素: 
D
输入一个元素: E
输入一个元素:  
输入一个元素: 
G
输入一个元素:  
输入一个元素:  
输入一个元素: 
F
输入一个元素:  
输入一个元素:  
输入一个元素: 

先序遍历:A B C D E G F 
中序遍历:C B E G D F A 
后序遍历:C G E F D B A 
二叉树深度为5
程序结束.

 
AI颠覆市场调研:生成式智能体如何重构商业决策? AI正在将市场调研从"成本中心"转变为"战略武器"。当企业能够用生成式智能体实时模拟百万级虚拟用户时,传统调研的样本偏差、时间滞后、成本高昂等问题将不复存在。对于开发者而言,这不仅是技术的狂欢,更是参与商业规则重构的历史机遇。行动建议立即体验Simile/Aaru的智能体平台,验证虚拟样本效果参与LLM持续性记忆架构的开源项目(如Memory Llama)关注AI调研API的标准化进程(如Hugging Face的Market Research Toolkit) 阅读详情

相关推荐

uniapp APP分享;判断用户是否安装APP,已安装直接打开,未安装跳转下载页;uniapp 在外部打开APP(schemes)

A将某商品分享给B,B点击后判断是否安装APP,若安装直接打开,没有安装则跳转下载页;

@微你 5681

二叉树的递归遍历

递归遍历分为先序遍历,后序遍历,中序遍历,只要理解了一个那么就都理解了

a4364634611的博客 7030

如何使用AKShare作为OpenBB的数据源

`openbb_akshare`项目是 OpenBB 的数据源扩展。可以用于查询A股和港股数据

FinAnalyzer金融分析工具 3196

二叉树的遍历算法之 递归算法

树的遍历算法之(递归算法) 递归算法分为三种(前序,中序,后序)根据根节点的访问顺序来定的。 前序访问顺序 ( 根 – 左节点 – 右节点 ) 中序访问顺序 ( 左节点 – 根 – 右节点 ) 后序访问顺序 ( 左节点 – 右节点 – 根 ) #include <iostream> struct BtreeNode{ int data; BtreeNode* left; BtreeNode* right; }; class Solution{ public:

WRRRRRR5的博客 790

copilot基于 DeepSeek-R1 思路构建 VLA 自动驾驶强化学习系统

下面给出一个完整示例代码,结合 DeepSeek‑R1 的技术方法,实现一个端到端的 VLA(视觉+语言行动)自动驾驶深度强化学习系统。.2f。

ywfwyht的博客 774

超全!!snowboy语音唤醒(树莓派4b)

通过snowboy进行树莓派的语音唤醒

crimaster1024的博客 8735

二叉树遍历方式——递归法

确定递归参数和返回值,在具体代码中实现,在本案例中,我们要用一个数组的方式来存储遍历的节点,所以参数需要用数组vector来存放数值,由于vec需要进行改变,所以引用的时候需要注意物理引用格式。递归单层逻辑:前序遍历法是中左右进行遍历,也就是先取中节点的数值,然后取左节点和右节点的数值。中序遍历则是左中右的方式,也就是先去左节点再去中间节点和右节点,同理,后序遍历是先取左节点,然后右节点,最后中间节点。在leetcode刷题中,二叉树的遍历方法可以简单的分为深度优先遍历和广度优先遍历。确定单层递归的原理。

kirei12315的博客 466

Linux双网卡设置IP属于同一网段的ping方法以及现象记录分析

文章目录前言ping以及MAC地址总结 前言 写在前面:经常遇到客户将板卡上的两个网络设备的IP地址设置为同一网段的情况,比如eth0:192.168.0.232,eth1:192.168.0.30. 我的解释是,不能设置为同一网段,或者使用其中一个时候下线另外一个网卡。但是我不知道这个说法到底是根据什么,查了很多资料也没找到明确的说法,但是下面这个实验能够说明一些现象的原因。 ping以及MAC地址 首先查看网卡的信息 ifconfig 因为两个网卡都在同一个网段,所以如果这个时候直接和我们的主机(I

“逛丢一只鞋”的博客 1万+

遍历二叉树的递归算法

二叉树的遍历是指按照某种次序寻访二叉树中的每个结点,使得每个结点都被访问一次且只被访问一次。遍历是二叉树中经常要用到的一种操作。在许多实际应用问题中,常常需要查找具有某一特征的结点,或者对二叉树中的每个结点逐个访问,在访问的过程中对某些结点或全部节点进行相应的处理。 1.前序遍历 前序遍历二叉树的递归定义为: 若二叉树为空数则遍历结束,否则 (1).访问根结点 (2).前序遍历根结点的左

Learn as if you were to live forever 631

微生物16S数据上传NCBI的SRA库

本篇内容仅包括:俺自己的实验收集了淡水、淡水沉积物、海水、海草附着微生物样品,测序所得的Fastq格式数据,在文章投稿发表时被要求数据需上传NCBI的SRA库,得到一个PRJNA2347899这样子的IDs。仅解决了这个上传过程!

Xf_Niu的博客 7435

STM32+Air724UG基于阿里云物联网平台的OTA远程升级实战指南

本文提供了一套基于STM32微控制器与Air724UG 4G Cat.1通信模组,通过阿里云物联网平台实现OTA远程升级的完整实战指南。文章详细阐述了BootLoader与用户程序的分工、云端配置、固件下载与烧写流程,并分享了关键代码实现与常见问题排查方法,帮助开发者快速为物联网设备部署稳定可靠的无线升级功能。

weixin_28285943的博客 514

数据结构——先序遍历的顺序创建二叉链表并中序遍历(C语言)

先序遍历的顺序创建二叉链表并中序遍历 1.算法步骤: 1)扫描数字序列,读入数字n。 2)如果n是一个 0 数字,则表明该二叉树为空树,即T=NULL;否则执行一下操作。 申请一个节点空间T 将n赋给(*T)->data 递归创建T的左子树 递归创建T的右子树 2.创建的结果图: 3.数字的输入顺序: 1 2 3 0 0 0 4 5 0 0 6 0 0 4.C语言完整程序 #include <stdio.h> #include...

weixin_46364710的博客 1万+

F280049C Crossbar X-BAR

X-BAR不是一个功能模块,只起内部外设与外设之间,或内部外设与GPIO的连接作用。配置X-BAR的就是在配置信号之间的连接。确实如这一节的开头所言,X-BAR提供了以各种配置连接设备输入、输出和内部资源的灵活性。学完这一节也知道为什么crossbar(X-BAR)的中文翻译是交叉开关。

xht2403267701的博客 3048

先序中序后序遍历二叉树的递归算法C语言,编写一个程序,实现二叉树的先序遍历,中序遍历,后序遍历的各种递归和非递归算法,以及层次遍历的算法...

满意答案文件 main.cpp 代码如下:#include // malloc()等#include // 标准输入输出头文件,包括EOF(=^Z或F6),NULL等#include // atoi(),exit()#include // 数学函数头文件,包括floor(),ceil(),abs()等#define ClearBiTree DestroyBiTree // 清空二叉树和销毁二叉树的...

weixin_39792803的博客 3517

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

c语言实现二叉树的遍历程序图,【算法】二叉树的递归遍历C语言实现

二叉树是一种极其重要的数据结构,以下是二叉树的结构定义 创建 和递归先序 中序 后序 遍历的代码.#include#includetypedef char ElemType;/*二叉树节点数据结构*/typedef struct node{ElemType data;struct treenode *lChild;struct treenode *rChild;} TreeNode;/*使用先序遍...

weixin_39617215的博客 314

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

c语言中递归程序和非递归算法,C语言 二叉树的遍历 递归和(多种)非递归算法...

#include#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0#define OVERFLOW -1#define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef int Status;typede...

weixin_28831461的博客 320

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

c语言中递归程序和非递归算法,二叉树中序遍历(递归和非递归)算法C语言实现...

二叉树中序遍历的实现思想是:访问当前节点的左子树;访问根节点;访问当前节点的右子树;图 1 二叉树以图 1 为例,采用中序遍历的思想遍历该二叉树的过程为:访问该二叉树的根节点,找到 1;遍历节点 1 的左子树,找到节点 2;遍历节点 2 的左子树,找到节点 4;由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树;由于节点 4 无右子树,因此节点 2 的左子树遍历完成,访问节点 2...

weixin_33967069的博客 515

递归算法和循环算法的转换c语言程序,二叉树中序遍历(递归和非递归)算法C语言实现...

二叉树中序遍历的实现思想是:访问当前节点的左子树;访问根节点;访问当前节点的右子树;图 1 二叉树以图 1 为例,采用中序遍历的思想遍历该二叉树的过程为:访问该二叉树的根节点,找到 1;遍历节点 1 的左子树,找到节点 2;遍历节点 2 的左子树,找到节点 4;由于节点 4 无左孩子,因此找到节点 4,并遍历节点 4 的右子树;由于节点 4 无右子树,因此节点 2 的左子树遍历完成,访问节点 2...

weixin_36064575的博客 258

二叉树遍历非递归算法

给大家一个效率较高的后序遍历非递归算法(c语言编写,本算法不需要改变二叉树的结点结构):typedef struct node  { /*二叉树的结点存储类型为链式*/    char data;    struct node *lchild,*rchild;}node,*btree;void backordertraverse(btree t)  {  /*用栈标记法(本人喜欢这样叫)*/   

青青的专栏--C/C++ OOA/D Design Pattern 4140

6-3 二叉树的递归遍历

void PreorderTraversal(BinTree BT) /* 二叉树的先序遍历 */void InorderTraversal(BinTree BT) /* 二叉树的中序遍历 */void PostorderTraversal(BinTree BT) /* 二叉树的后序遍历 */其中,BinTree的结构定义为:要求3个函数分别按照访问顺序打印出结点的内容,字符之间无空格。

2401_84341430的博客 805

二叉树遍历的算法

问题描述:  实现二叉树的先序、中序、后序遍历的递归算法,并对用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”创建的二叉树进行测试。          请利用二叉树算法库。 输入描述: 若干测试数据。 程序输出: 二叉树的输出。 二叉树算法库 main函数: int main() {     BTNode *b;     CreateBTNod

szk1234567890的博客 494

二叉树遍历的非递归实现(C语言)

内容: 编写程序,实现下述功能,并上机调试通过 (1)按中序顺序建立一棵二叉树; (2)用非递归方式遍历二叉树(先序),输出遍历序列。 【提示】采用二叉链表做存储结构,建立二叉树。借助于栈结构来实现二叉树遍历的非递归算法。 步骤: 1.算法分析: 根据题目需求,可知整个程序需要两个比较大的板块,第一个是要根据中序顺序建立一个二叉树,第二个是最重要的也是核心的是用非递归先序方式遍历二叉树。 首先来看第一步,要想完成第一步,首先需要了解到无论是扩展二...

qbyyds的博客 5719

非递归遍历二叉树

http://blog.youkuaiyun.com/zyr1984/article/details/5688608 // 中序递归遍历 void InOrderTrvDiGui(NODE* pNode) {  if(pNode)  {  InOrderTrvDiGui(pNode->leftNode);  cout info; // visit node  InO

happylife1527的专栏 544

二叉树遍历:递归方法与非递归方法——递归程序修改为非递归的方法

前天去美团面试,二面基本一路顺风,后来,碰到一个用非递归的方法求解二叉树高度,并要求现场写程序,一下就卡住了,非常不爽。这两天把这个部分恶补了一下,总结了一下思路如下。 1、考虑清楚解题类似于遍历中的前序 or 中序 or 后续; 2、考虑清楚在递归程序中,每次会有哪些内容需要进栈:节点本身、返回地址(用于告诉程序返回后应该从何处执行)、局部变量、返回值。 下面先上代码,并比较得出思路。

xiongjinshui的专栏 692

线索二叉树和非递归遍历(中序)

基于中序遍历的线索二叉树和非递归遍历 #include <stdio.h> #include <malloc.h> #define MaxSize 100 typedef char ElemType; typedef struct node { ElemType data; int ltag,rtag; //增加的线索标记 struct node *lchild; struct node *rchild; } TBTNode; void CreateTBTNo

Lau's Blog 1405

中序遍历及其递归程序非递归化

只要翻开任意一本《数据结构》书,翻到二叉树那一章,你可以看到一个典型的二叉树中序遍历算法形如: 代码1: 经典的二叉树中序遍历算法 typedef struct _Node { struct _Node *left, *right; char value; } Node; void valueInMiddle(Node *root) { // 中序遍历二叉树 while(1) { while(root != NULL) { push.

方老师的博客 1007
上一篇: [IBM Developer]使用 /proc 文件系统来访问 Linux 内核的内容
下一篇: 已知二叉树的先序和中序求后序
TrueLie
博客等级 码龄24年 85粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值