二叉树的三种遍历方式
来源:互联网 发布:android php服务器 编辑:程序博客网 时间:2024/05/22 00:21
遍历是按某种策略访问树中的每个结点,且仅访问一次的过程。由于二叉树所具有的递归性质,一棵非空的二叉树是由根结点、左子树和右子树三部分构成的,因此若能依次遍历这三部分,也就遍历了整棵二叉树。按照先遍历左子树后遍历右子树的约定,根据访问根结点位置的不同,可得到二叉树的先序、中序和后序三中遍历方法。此外,对二叉树还可进行层序遍历。
(1)先序就是先遍历根,再遍历左子树,再遍历右子树。例如上图的先序遍历是:ABCDEFGHK
#include<cstdio>#include <cstdlib>typedef char TelemType;typedef struct TNode {TelemType data;struct TNode *lchild, *rchild;} BitNode;//声明BitNode* createTree(void);void inOrderTraverse(BitNode *);int main(int agrc, char *argv[]) {BitNode *root = NULL;root = createTree();printf("\n先序遍历二叉树:");inOrderTraverse(root);system("pause");return 0;}//创建二叉树BitNode* createTree(void) {BitNode *b;TelemType ch;scanf("%c", &ch);if (ch == '#') {b = NULL;}else {b = (BitNode *)malloc(sizeof(BitNode));b->data = ch;b->lchild = createTree();b->rchild = createTree();}return b;}//先序遍历void inOrderTraverse(BitNode *root) {if (root!=NULL) { printf("%d", root->data); /*先访问根结点*/ inOrderTraverse(root->lchild); inOrderTraverse(root->rchild); }}
(2)中序就是先遍历左子树,再遍历根,再右子树。例如上图的中序遍历是:BDCAEHGKF#include<cstdio>#include <cstdlib>typedef char TelemType;typedef struct TNode {TelemType data;struct TNode *lchild, *rchild;} BitNode;//声明BitNode* createTree(void);void inOrderTraverse(BitNode *);int main(int agrc, char *argv[]) {BitNode *root = NULL;root = createTree();printf("\n中序遍历二叉树:");inOrderTraverse(root);system("pause");return 0;}//创建二叉树BitNode* createTree(void) {BitNode *b;TelemType ch;scanf("%c", &ch);if (ch == '#') {b = NULL;}else {b = (BitNode *)malloc(sizeof(BitNode));b->data = ch;b->lchild = createTree();b->rchild = createTree();}return b;}//中序遍历void inOrderTraverse(BitNode *root) {if (root) {inOrderTraverse(root->lchild);printf("%c", root->data);inOrderTraverse(root->rchild);}}从A出发,到了B你现在处理的就是B为根的树,要把B这颗树处理完。中序,先访问左子树,B的左子树为空,然后访问根,就是访问B,这时候输出B。然后代码的下一句是访问右子树,现在到了CD这棵树,先找这树的左子树,是D。D没有左子树,访问根,就是D本身,输出。看右子树,D右子树也是空,返回,访问输出C。再看C的右子树,没有。一层层返回,到A,输出A。再看A的右子树……递归这事,就是每次把问题规模缩小一点,然后用同样的方法去解决它。(3)后序就是先遍历左子树,再右子树,再根。例如上图的后序遍历是:DCBHKGFEA#include<cstdio>#include <cstdlib>typedef char TelemType;typedef struct TNode {TelemType data;struct TNode *lchild, *rchild;} BitNode;//声明BitNode* createTree(void);void inOrderTraverse(BitNode *);int main(int agrc, char *argv[]) {BitNode *root = NULL;root = createTree();printf("\n后序遍历二叉树:");inOrderTraverse(root);system("pause");return 0;}//创建二叉树BitNode* createTree(void) {BitNode *b;TelemType ch;scanf("%c", &ch);if (ch == '#') {b = NULL;}else {b = (BitNode *)malloc(sizeof(BitNode));b->data = ch;b->lchild = createTree();b->rchild = createTree();}return b;}//后序遍历void inOrderTraverse(BitNode *root) {if (root!=NULL) { inOrderTraverse(root->lchild); inOrderTraverse(root->rchild); printf("%d", root->data); /*先访问根结点*/}}
0 0
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- 二叉树的三种遍历方式
- 二叉树的java构建和三种遍历方式
- 数据结构中二叉树的三种遍历方式
- 二叉树的建立以及三种遍历方式
- 二叉树的三种遍历方式:递归、栈、循环
- 二叉树的遍历三种方式()
- 二叉树的创建和三种遍历方式
- 二叉树的创建和三种遍历方式
- 二叉树的三种遍历方式java实现
- 算法-二叉树的三种遍历方式
- 二叉树的三种遍历方式总结
- C语言:二叉树的三种遍历方式
- 用C++实现二叉树的三种遍历方式
- 用Java实现二叉树的三种遍历方式
- ntp-实现时间同步
- Shiro相关知识点
- Tomcat内存溢出报java.lang.OutOfMemoryError: PermGen space错误的解决方案
- 洛谷 P3406 海底高铁
- Laravel 5 User Model not found
- 二叉树的三种遍历方式
- 如何在Swift中创建Action扩展
- 在活动中使用 Menu
- Rxjava(过滤类)-Skip
- 机器学习-线性回归
- [Web前端技术教学]CSS中可继承的属性以及无继承性的属性
- 搞懂JAVA集合类--HashMap(三)
- 雅虎团队经验:网站页面性能优化的 34条
- NSZone理解