二叉树的构建和三种遍历算法 (递归实现)
2016-04-18 22:34
597 查看
#include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef char ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;//左右孩子指针 } BiTNode,*BiTree; Status CreateBiTree(BiTree &T) { // 按先序次序输入二叉树中结点的值(一个字符),’#’字符表示空树, // 构造二叉链表表示的二叉树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 Status PrintElement( ElemType e ) { printf("%c", e ); return OK; }// PrintElement Status PreOrderTraverse( BiTree T ) { if ( T ){ if (PrintElement(T->data)); if (PreOrderTraverse(T->lchild)); if (PreOrderTraverse(T->rchild)); return OK; return ERROR; } else return OK; } // PreOrderTraverse Status InOrderTraverse( BiTree T) { if ( T ){ if (InOrderTraverse(T->lchild)); if (PrintElement(T->data)); if (InOrderTraverse(T->rchild)); return OK; return ERROR; } else return OK; } // InOrderTraverse Status PostOrderTraverse( BiTree T) { // 后序遍历二叉树T的递归算法 if ( T ){ if ( PostOrderTraverse(T->lchild)); if ( PostOrderTraverse(T->rchild)); if (PrintElement(T->data)); return OK; return ERROR; } else return OK; } // PostOrderTraverse int main() //主函数 { BiTree T; CreateBiTree(T); PreOrderTraverse(T); printf("\n"); InOrderTraverse(T); printf("\n"); PostOrderTraverse(T); printf("\n"); return 0; }
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 有关数据库SQL递归查询在不同数据库中的实现方法
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#中的递归APS和CPS模式详解
- C#冒泡法排序算法实例分析
- WinForm实现按名称递归查找控件的方法
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#实现的算24点游戏算法实例分析
- C#中的尾递归与Continuation详解
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法