一、二叉树定义

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

实现二叉树的先序遍历、中序遍历、后序遍历相关推荐

  1. 二叉树前序遍历python输出_[宜配屋]听图阁 - Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例...

    本文实例讲述了Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作.分享给大家供大家参考,具体如下: 实现一个功能: 输入:一颗二叉树的先序和中序遍历 输出:后续遍历 思想: 先序遍历中,第 ...

  2. 为什么普通树没有中序遍历和森林没有后序遍历

    本文为个人理解,若有错误欢迎指正! 这里说的树当然是指普通的树,而不是树中比较特别的二叉树. 1.为什么普通树没有中序遍历 中序遍历是对于二叉树而言: 中序遍历左子树,访问根结点,中序遍历右结点. 在 ...

  3. 给定二叉树先序、中序遍历序列,求后序遍历

    给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列. 输入描述: 输入为一行. 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔.保证数据合法 输出描述: 对应输 ...

  4. 二叉树前序中序后序_leetcode889_go_根据前序和后序遍历构造二叉树

    leetcode889_根据前序和后序遍历构造二叉树 01 - 题目 返回与给定的前序和后序遍历匹配的任何二叉树. pre 和 post 遍历中的值是不同的正整数. 示例:输入:pre = [1,2, ...

  5. 已知二叉树先序和中序遍历结果,求后序遍历结果

    以下面的例题为例进行讲解:已知一棵二叉树的先序遍历序列和中序遍历序列分别是ABDCEF.BDAECF,求二叉树及后序遍历序列. 分析:先序遍历序列的第一个字符为根结点.对于中序遍历,根结点在中序遍历序 ...

  6. 《剑指offer》-- 从上往下打印二叉树、二叉搜素树的后序遍历、二叉树中和为某一值的路径、二叉树与双向链表

    一.从上往下打印二叉树: 1.题目: 上往下打印出二叉树的每个节点,同层节点从左至右打印. 2.解题思路: 用arraylist模拟一个队列来存储相应的TreeNode. 3.代码实现: public ...

  7. 二叉树前序中序后续线索树_后序线索二叉树怎么画 线索二叉树基本操作详解 - 办公软件 - 服务器之家...

    后序线索二叉树怎么画 线索二叉树基本操作详解 发布时间:2017-05-23 来源:服务器之家 遍历二叉树是以一定规则将二叉树中结点排列成一个线性序列,得到二叉树中结点的先序,中序或后序序列.这实际上 ...

  8. 五种方式反转二叉树(前序递归和迭代反转,后序递归和迭代反转,层序反转)

    leetcode 226 反转二叉树 题目链接 翻转一棵二叉树. 示例: 输入: 4 / 2 7 / \ / 1 3 6 9 输出: 4 / 7 2 / \ / 9 6 3 1 五种方式实现二叉树的反 ...

  9. 树形结构:使用栈实现,快排,先序遍历,归并排序,后序遍历

    主要还是学习使用栈模拟实现递归: 总结一下,首先通过栈实现递归是有规律可行的,这里面涉及整体到部分,一切都是对象的思想,把一个整体看成一个对象,这个对象是数据和操作的集合,定义这些操作,把操作顺序按照 ...

  10. 给出中序和前序求后序Java,已知二叉樹前序,中序遍歷,求后序遍歷,java實現...

    簡單介紹一下思想,先看前序,前序遍歷的第一個節點,就是該樹的根.在中序中找到該根的位置,設為index,在中序遍歷集合中,位於index之前的屬於根的左子樹,位於index之后的屬於根的右子樹.然后, ...

最新文章

  1. Linux LXC基本配置选项
  2. IOS性能调优系列:使用Time Profiler发现性能瓶颈
  3. Xamarin 2017.11.9更新
  4. MySQL 同步(三)不同版本问题
  5. wxWidgets:wxAuiNotebookEvent类用法
  6. android studio你可能忽视的细节——启动白屏?drawable和mipmap出现的意义?这里都有!!!...
  7. springboot + ApplicationListener
  8. VideoSolo Blu ray Player for Mac - 强大的蓝光播放器
  9. .Net并行编程系列文章导航
  10. ElasticFusion: Real-Time Dense SLAM and Light Source Estimation
  11. 设计模式之UML关系图
  12. AIR移动平台打开图片文件
  13. Java将json格式数据转换为对象
  14. python制作微信聊天机器人:10行代码让你秒变撩妹达人
  15. 利用SPSS进行多重线性回归分析-基础篇
  16. 树莓派安装anaconda
  17. ios申请企业开发者账号的代理_苹果企业开发者账号的申请详解
  18. 小Z的袜子【莫队算法】
  19. 使用java自动下载网易云音乐
  20. 论机器学习中数据的重要性

热门文章

  1. POJ 1236 学校网络间的强连通
  2. 【原创】DevExpress控件GridControl中的布局详解
  3. Python常用语句及流程控制
  4. ajax方式下载文件
  5. Kafka源码深度解析-序列3 -Producer -Java NIO
  6. 2008R2文件服务器迁移到2012R2
  7. bzoj 2748: [HAOI2012]音量调节
  8. 五 Django 1.5.4 User Authentication 用户认证
  9. [转载]VC6下安装STLport-5.2.1
  10. HandlerSocket client for java——hs4j正式发布0.1版本