C语言构造并递归遍历二叉树
2012-12-23 17:32
218 查看
#include<stdio.h> #include<malloc.h> #define FALSE 1 #define ERROR 0 #define OK 1 #define ON 0 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; } BiTNode,*BiTree; typedef int Status; BiTree T; Status CreateBiTree(BiTree *T) { char ch; scanf("%c",&ch); if (ch==' ') *T = NULL; else { if (!((*T) = (BiTNode *)malloc(sizeof(BiTNode)))) return ERROR; (*T)->data = ch; CreateBiTree(&((*T)->lchild)); // 构造左子树 CreateBiTree(&((*T)->rchild)); // 构造右子树 } return OK; } // CreateBiTree int vi(char c) { printf("%c ",c); return OK; } //先序遍历的递归 void PreOrder(BiTree T) { if(T) { vi(T->data); //访问结点 PreOrder(T->lchild); //遍历左子树 PreOrder(T->rchild); //遍历右子树 } } //中序遍历的递归 void InOrder(BiTree T) { // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。 // 中序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 if(T) { InOrder(T->lchild); vi(T->data); InOrder(T->rchild); } } // InOrderTraverse //后序遍历的递归 void PostOrder(BiTree T) { // 采用二叉链表存储结构,Visit是对数据元素操作的应用函数。 // 中序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 if(T) { PostOrder(T->lchild); PostOrder(T->rchild); vi(T->data); } } // InOrderTraverse int main() { printf("先序输入二叉树(空格代表空节点):\n"); CreateBiTree(&T); printf("先序输出二叉树:\n"); PreOrder(T); printf("\n"); printf("中序输出二叉树:\n"); InOrder(T); printf("\n"); printf("后序输出二叉树:\n"); PostOrder(T); printf("\n"); return 0; }
运行结果:
相关文章推荐
- C语言构造并非递归遍历二叉树
- 二叉树前序、中序、后序递归遍历实现(C语言)
- 先序递归构造二叉树 中序递归遍历二叉树
- C语言遍历二叉树的递归调用操作集
- 树和二叉树---C语言利用栈实现二叉树的递归、非递归的前、中、后序遍历
- C语言二叉树建立,遍历(递归与非递归),交换子树
- C语言二叉树常见操作详解【前序,中序,后序,层次遍历及非递归查找,统计个数,比较,求深度】
- <二叉树 前中后 层序 非递归遍历 c语言实现>
- C语言二叉树的遍历,递归和非递归
- 二叉树非递归遍历C语言实现
- C语言递归实现二叉树的先序、中序、后序遍历
- 二叉链树的创建结点,递归构造二叉树、非递归构造二叉树、递归进行前、中、后遍历,非递归进行前中后遍历、层次遍历
- 二叉树的创建、前序中序后序递归遍历与非递归遍历、层序遍历以及二叉树简单应用的C语言实现
- 二叉树的构造,递归遍历,非递归遍历
- 二叉树的性质以及二叉树的遍历(非递归)(c语言)(一)
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- (C语言)二叉树非递归遍历前序和中序(数据结构十四)
- C语言 二叉树的遍历 递归和(多种)非递归算法
- C++二叉树之构造拷贝赋值,递归和非递归的前序遍历,中序遍历和后序遍历,以及层序遍历
- (C语言)二叉树非递归遍历前序和中序(数据结构十四)