二叉树递归遍历

简介:

复制代码
  1 /* 模块名      : 树
  2 /* 文件名      : btree.cpp
  3 /* 功能描述    : 二叉树的递归遍历
  4 
  5 /* 备注        : 输入示例与输出结果
  6 /* e.g. input  : ABD###CE#F###
  7 /* bi-tree     :
  8 /*                 A
  9 /*                / \
 10 /*               B   C
 11 /*              /   /
 12 /*             D   E
 13 /*                  \
 14 /*                   F
 15 /* 
 16 /* pre-order traverse: A B D C E F
 17 /* in-order traverse: D B A E F C
 18 /* post-order traverse: D B F E C A
 19 *******************************************************************************/
 20 #include <stdio.h>
 21 #include <stdlib.h>
 22 #include <string>
 23 
 24 /******************************************************************************
 25 /* 数据类型和常量定义
 26 /******************************************************************************/
 27 #define OK           1
 28 #define ERROR        0
 29 #define OVERFLOW    -2
 30 
 31 typedef int Status;
 32 typedef int TElemType;
 33 
 34 
 35 /******************************************************************************
 36 /* 数据结构声明
 37 /******************************************************************************/
 38 /* 二叉树的链式存储结构 */
 39 typedef struct BiTNode {
 40     TElemType data;
 41     struct BiTNode *lchild, *rchild; /* 左右孩子指针 */
 42 } BiTNode, *BiTree;
 43 
 44 
 45 /******************************************************************************
 46 /* 函数原型声明
 47 /******************************************************************************/
 48 Status Visit(TElemType e);
 49 Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType));
 50 Status InOrderTraverse(BiTree T, Status (*Visit)(TElemType));
 51 Status PostOrderTraverse(BiTree T, Status (*Visit)(TElemType));
 52 
 53 
 54 //功能     : 打印节点数据
 55 Status Visit(TElemType e)
 56 {
 57     printf("%c", e);
 58     return OK;
 59 }
 60 
 61 //功能     : 前序遍历二叉树
 62 Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType))
 63 {
 64     if(T){
 65         if(Visit(T->data))
 66             if(PreOrderTraverse(T->lchild, Visit))
 67                 if(PreOrderTraverse(T->rchild, Visit))
 68                     return OK;
 69                 return ERROR;
 70     }
 71     else
 72         return OK;
 73 }
 74 
 75 
 76 //功能     : 中序遍历二叉树
 77 Status InOrderTraverse(BiTree T, Status (*Visit)(TElemType))
 78 {
 79     if(T){
 80         if(InOrderTraverse(T->lchild, Visit))
 81             if(Visit(T->data))
 82                 if(InOrderTraverse(T->rchild, Visit))
 83                     return OK;
 84                 return ERROR;
 85     }
 86     else
 87         return OK;
 88 }
 89 
 90 //功能     : 后序遍历二叉树
 91 Status PostOrderTraverse(BiTree T, Status (*Visit)(TElemType))
 92 {
 93     if(T){
 94         if(PostOrderTraverse(T->lchild, Visit))
 95             if(PostOrderTraverse(T->rchild, Visit))
 96                 if(Visit(T->data))
 97                     return OK;
 98                 return ERROR;
 99     }
100     else
101         return OK;
102 }
103 
104 
105 //功能     : 创建二叉树
106 //备注     : 前序方式创建
107 Status CreateBiTree(BiTree &T)
108 {
109     char ch = getchar();
110     if('#' == ch) T = NULL;
111     else {
112         if(!(T = (BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW);
113         T->data = ch;             //生成根结点
114         CreateBiTree(T->lchild);  //构造左子树
115         CreateBiTree(T->rchild);  //构造右子树
116     }
117     return OK;
118 }
119 
120 void main()
121 {
122     BiTree T;
123     CreateBiTree(T);
124 
125     printf("Pre Order Traverse: ");
126     PreOrderTraverse(T, Visit);        //前序方式遍历二叉树
127 
128     printf("\nIn Order Traverse: ");
129     InOrderTraverse(T, Visit);         //中序方式遍历二叉树
130 
131     printf("\nPost Order Traverse: ");
132     PostOrderTraverse(T, Visit);       //后序方式遍历二叉树
133 }
复制代码

 

来源:http://www.cnblogs.com/JCSU/articles/2005904.html




本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3292436.html,如需转载请自行联系原作者

目录
相关文章
|
3天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
5407 6
|
1天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
850 0
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
15天前
|
人工智能
千问办公官网入口:阿里AI办公QwenWork产品页和免费网页端链接
千问办公官网含两大入口:一是网页端(qwenwork.cn),即开即用,支持浏览器直接访问;二是阿里云产品页 https://t.aliyun.com/U/JNKJuO 提供免费/付费版详情、功能介绍及使用指南。
|
15天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3099 9
|
14天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1751 8
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
16天前
|
缓存 人工智能 自然语言处理
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
本文是阿里云百炼平台Qwen3.8-Flash大模型的选型接入指南,作为兼顾性能与响应速度的高性价比多模态模型,它支持百万级上下文窗口、全场景多模态输入与完整智能体能力矩阵,适配编程辅助、智能体协作等核心场景。文中同步梳理了最新下调的阶梯定价、夜间4折等优惠活动,搭配OpenAI兼容流式调用示例,帮助开发者低成本快速落地高并发AI应用。
阿里云qwen3.8-flash大模型介绍:模型能力、模型价格、免费额度与最新活动
|
9天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1071 1
|
15天前
|
人工智能 API 内存技术
刚刚 DeepSeek V4.1 Flash 开启内测,1 分钟教你用上!
刚刚 DeepSeek 内测群发布了 DeepSeek V4.1 Flash 中间版本内测的消息,这次的模型采用了新的结构,原生支持多模态、能力更强、速度更快、且成本更低。
2013 15