实现二叉树的先序遍历、中序遍历、后序遍历
一、二叉树定义
1.树的术语:
树的结点:包含一个数据元素及若干指向子树的分支;
孩子结点:结点的子树的根称为该结点的孩子;
双亲结点:B 结点是A 结点的孩子,则A结点是B 结点的双亲;
兄弟结点:同一双亲的孩子结点; 堂兄结点:同一层上结点;
祖先结点: 从根到该结点的所经分支上的所有结点子孙结点:以某结点为根的子树中任一结点都称为该结点的子孙
结点层:根结点的层定义为1;根的孩子为第二层结点,依此类推;
树的深度:树中最大的结点层
结点的度:结点子树的个数
树的度: 树中最大的结点度。
叶子结点:也叫终端结点,是度为 0 的结点;
分枝结点:度不为0的结点;
有序树:子树有序的树
无序树:不考虑子树的顺序
2.由树引出二叉树
二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。二叉树的第i层至多有2^(i-1)个结点;深度为k的二叉树至多有2^k-1个结点。
二叉树有五种基本形态:
(1)空二叉树;
(2)只有一个根结点的二叉树;
(3)只有左子树;
(4)只有右子树;
(5)完全二叉树
尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。(当有序树只有一个节点时没有左右之分,而二叉树不是)
3.二叉树的遍历
附上代码:
#include<stdio.h>
#include<stdlib.h>
typedef char TElemType;
#define OK 1
#define ERROR 0
typedef int Status;typedef struct BiTNode{TElemType data;struct BiTNode* LChild,*RChild;
}BiTNode,*BiTree;Status Visit(TElemType e){if(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;}}}return ERROR;}else{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;}}}return ERROR;}else{return OK;}
}Status CreatTree(BiTree& T){TElemType ch;T=(BiTree)malloc(sizeof(BiTNode));scanf("%c",&ch);getchar();T->data=ch;if(ch==' '){T->LChild=NULL;T->RChild=NULL;return OK;}printf("输入%c的左孩子:",ch);CreatTree(T->LChild);printf("输入%c的右孩子:",ch);CreatTree(T->RChild);
}int main(){BiTree T=NULL;printf("输入root:");CreatTree(T);printf("\nPreOrderTraverse:");PreOrderTraverse(T,Visit);printf("\nInOrderTraverse:");InOrderTraverse(T,Visit);printf("\nPostOrderTraverse:");PostOrderTraverse(T,Visit);
}
遍历的树:
运行截图:
转载于:https://www.cnblogs.com/jiangpengcheng/articles/8075185.html
实现二叉树的先序遍历、中序遍历、后序遍历相关推荐
- 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...
本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作.分享给大家供大家参考,具体如下: 实现一个功能: 输入:一颗二叉树的先序和中序遍历 输出:后续遍历 思想: 先序遍历中,第 ...
- 为什么普通树没有中序遍历和森林没有后序遍历
本文为个人理解,若有错误欢迎指正! 这里说的树当然是指普通的树,而不是树中比较特别的二叉树. 1.为什么普通树没有中序遍历 中序遍历是对于二叉树而言: 中序遍历左子树,访问根结点,中序遍历右结点. 在 ...
- 给定二叉树先序、中序遍历序列,求后序遍历
给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列. 输入描述: 输入为一行. 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔.保证数据合法 输出描述: 对应输 ...
- 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树
leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...
- 已知二叉树先序和中序遍历结果,求后序遍历结果
以下面的例题为例进行讲解:已知一棵二叉树的先序遍历序列和中序遍历序列分别是ABDCEF.BDAECF,求二叉树及后序遍历序列. 分析:先序遍历序列的第一个字符为根结点.对于中序遍历,根结点在中序遍历序 ...
- 《剑指offer》-- 从上往下打印二叉树、二叉搜素树的后序遍历、二叉树中和为某一值的路径、二叉树与双向链表
一.从上往下打印二叉树: 1.题目: 上往下打印出二叉树的每个节点,同层节点从左至右打印. 2.解题思路: 用arraylist模拟一个队列来存储相应的TreeNode. 3.代码实现: public ...
- 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...
后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...
- 五种方式反转二叉树(前序递归和迭代反转,后序递归和迭代反转,层序反转)
leetcode 226 反转二叉树 题目链接 翻转一棵二叉树. 示例: 输入: 4 / 2 7 / \ / 1 3 6 9 输出: 4 / 7 2 / \ / 9 6 3 1 五种方式实现二叉树的反 ...
- 树形结构:使用栈实现,快排,先序遍历,归并排序,后序遍历
主要还是学习使用栈模拟实现递归: 总结一下,首先通过栈实现递归是有规律可行的,这里面涉及整体到部分,一切都是对象的思想,把一个整体看成一个对象,这个对象是数据和操作的集合,定义这些操作,把操作顺序按照 ...
- 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...
簡單介紹一下思想,先看前序,前序遍歷的第一個節點,就是該樹的根.在中序中找到該根的位置,設為index,在中序遍歷集合中,位於index之前的屬於根的左子樹,位於index之后的屬於根的右子樹.然后, ...
最新文章
- Linux LXC基本配置选项
- IOS性能调优系列:使用Time Profiler发现性能瓶颈
- Xamarin 2017.11.9更新
- MySQL 同步(三)不同版本问题
- wxWidgets:wxAuiNotebookEvent类用法
- android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!...
- springboot + ApplicationListener
- VideoSolo Blu ray Player for Mac - 强大的蓝光播放器
- .Net并行编程系列文章导航
- ElasticFusion: Real-Time Dense SLAM and Light Source Estimation
- 设计模式之UML关系图
- AIR移动平台打开图片文件
- Java将json格式数据转换为对象
- python制作微信聊天机器人:10行代码让你秒变撩妹达人
- 利用SPSS进行多重线性回归分析-基础篇
- 树莓派安装anaconda
- ios申请企业开发者账号的代理_苹果企业开发者账号的申请详解
- 小Z的袜子【莫队算法】
- 使用java自动下载网易云音乐
- 论机器学习中数据的重要性
热门文章
- POJ 1236 学校网络间的强连通
- 【原创】DevExpress控件GridControl中的布局详解
- Python常用语句及流程控制
- ajax方式下载文件
- Kafka源码深度解析-序列3 -Producer -Java NIO
- 2008R2文件服务器迁移到2012R2
- bzoj 2748: [HAOI2012]音量调节
- 五 Django 1.5.4 User Authentication 用户认证
- [转载]VC6下安装STLport-5.2.1
- HandlerSocket client for java——hs4j正式发布0.1版本