二叉树递归遍历

简介: 1 /* 模块名 : 树 2 /* 文件名 : btree.cpp 3 /* 功能描述 : 二叉树的递归遍历 4 5 /* 备注 : 输入示例与输出结果 6 /* e.

  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

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
1天前
|
算法
二叉树的递归遍历和非递归遍历
二叉树的递归遍历和非递归遍历
4 0
|
1天前
递归遍历二叉树
递归遍历二叉树的思路
94 0
|
6月前
|
存储 算法 C++
【二叉树】利用前序和中序遍历结果生成二叉树并输出其后序和层序遍历结果
【二叉树】利用前序和中序遍历结果生成二叉树并输出其后序和层序遍历结果
64 0
|
9月前
|
存储
线索化二叉树
线索化二叉树
38 0
|
11月前
|
存储 算法 容器
遍历二叉树
大家好,我是王有志。今天我们继续学习数据结构与算法的内容,主要是如何遍历一棵二叉树,那么我们直接开始吧。
51 0
遍历二叉树
|
11月前
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(上)
|
11月前
|
存储 搜索推荐
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(下)
【二叉树OJ题(二)】前序遍历&&中序遍历&&后序遍历&&另一颗树的子树&&二叉树遍历&&平衡二叉树(下)
leetcode 144 145 94二叉树的三种递归遍历
leetcode 144 145 94二叉树的三种递归遍历
45 0
先序、中序、后序遍历确定唯一树
快速学习先序、中序、后序遍历确定唯一树
先序、中序、后序遍历确定唯一树