二叉树前中后序算法
来源:互联网 发布:app源码 带后台数据库 编辑:程序博客网 时间:2024/06/05 15:05
#include<stdio.h>typedef struct Node{ char data; struct Node *LChild; struct Node *RChild;}BiTNode,*BiTree;void CreateBiTree(BiTree *bitree){ char c = getchar(); if(c == '.') (*bitree) = NULL; else { (*bitree) = (BiTree)malloc(sizeof(BiTNode)); (*bitree) ->data = c; CreateBiTree(&((*bitree)->LChild)); CreateBiTree(&((*bitree)->RChild)); }}void PreOrder(BiTree root){ /*先序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/ if(root != NULL){ printf("%c",root->data); /*输出根节点*/ PreOrder(root->LChild); /*先序遍历左子树*/ PreOrder(root->RChild); /*先序遍历右子树*/ }}InOrder(BiTree root)/*中序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/{ if (root!=NULL){ InOrder(root ->LChild); /*中序遍历左子树*/ printf("%c",root ->data); /*访问根结点*/ InOrder(root ->RChild); /*中序遍历右子树*/}}void PostOrder(BiTree root)/* 后序遍历二叉树,root为指向二叉树(或某一子树)根结点的指针*/{ if(root!=NULL){ PostOrder(root ->LChild); /*后序遍历左子树*/ PostOrder(root ->RChild); /*后序遍历右子树*/ printf("%c",root ->data); /*访问根结点*/}} void PreOrder1(BiTree root) /* 先序遍历输出二叉树结点, root为指向二叉树根结点的指针 */ {if (root!=NULL) {printf("%c",root ->data); /* 输出根结点 */PreOrder(root ->LChild); /* 先序遍历左子树 */PreOrder(root ->RChild); /* 先序遍历右子树 */ } } void PreOrder2(BiTree root) /* 先序遍历输出二叉树中的叶子结点 , root为指向二叉树根结点的指针 (参考他人)*/ { if (root!=NULL) {if (root ->LChild==NULL && root ->RChild==NULL) printf("%c",root ->data); /* 输出叶子结点 */ PreOrder(root ->LChild); /* 先序遍历左子树 */ PreOrder(root ->RChild); /* 先序遍历右子树 */ } } /*采用递归算法,如果是空树,返回0;如果只有一个结点,返回1;否则为左右子树的叶子结点数之和。*/ int leaf(BiTree root) { int LeafCount; if(root==NULL) LeafCount =0; else if ((root->LChild==NULL)&&(root->RChild==NULL)) LeafCount =1; else /* 叶子数为左右子树的叶子数目之和 */ LeafCount =leaf(root->LChild)+leaf(root->RChild);return LeafCount; } int PostTreeDepth(BiTree bt) /* 后序遍历求二叉树bt高度的递归算法(参考他人) */ { int hl, hr, max; if(bt!=NULL) { hl=PostTreeDepth(bt->LChild); /* 求左子树的深度 */ hr=PostTreeDepth(bt->RChild); /* 求右子树的深度 */ max=hl>hr?hl:hr; /* 得到左、右子树深度较大者*/ return(max+1); /* 返回树的深度 */ } else return(0); /* 如果是空树,则返回0 */}int Hmax=0; // 先序遍历求二叉树bt高度的递归算法,h为bt指向结点所在层次,初值为1//depth为当前求得的最大层次,为全局变量,调用前初值为0void PreTreeDepth(BiTree bt, int h){ if(bt==NULL) return ; if(bt->LChild==NULL&&bt->RChild==NULL) { Hmax = Hmax>h ? Hmax:h; } PreTreeDepth(bt->LChild, h+1); /* 遍历左子树 */ PreTreeDepth(bt->RChild, h+1); /* 遍历右子树 */}int main(){ BiTree tree; CreateBiTree(&tree); printf("PreOrder:\n"); PreOrder(tree); printf("\nInOrder:\n"); InOrder(tree); printf("\nPostOrder:\n"); PostOrder(tree); printf("\nPreOrder1:\n"); PreOrder1(tree); printf("\nPreOrder2:\n"); PreOrder2(tree); printf("叶子数:%d\n",leaf(tree)); printf("后序遍历求二叉树bt高度:%d\n",PostTreeDepth(tree)); Hmax=0; PreTreeDepth(tree,1); printf("\nPreTreeDepth: % d\n",Hmax); return 0;}/*ABDE..F...CGI...HJ..K.L..*/
阅读全文
0 0
- 二叉树前中后序算法
- 算法题目-二叉树前中后序遍历
- 线索二叉树算法
- 数据结构-二叉树算法
- 【算法】二叉树
- 二叉树相关算法
- 二叉树相关算法
- 数组二叉查找算法
- 二叉树深度算法
- 二叉树算法
- 二叉树算法
- 二叉树相关算法
- 二叉树层序遍历算法
- 二叉树算法
- 线索二叉树算法
- 二叉树遍历算法
- 二叉树遍历算法
- 二叉树算法总结
- 从浅到深了解ArrayList
- 搭建个人博客-hexo+github详细完整步骤
- django中用外键还是非外键?建议尽量用外键。
- JAVA第十四周作业
- maven项目中添加自己的jar包
- 二叉树前中后序算法
- request.getParameterMap value 值出现数组的情况,转
- Spring Bean的生命周期(非常详细)
- Spring基础:使用外部属性文件
- 事物的传播特性和隔离级别
- CAS 单点登录学习
- 手把手教你把Vim改装成一个IDE编程环境(图文)(转载)
- django序列化时如何添加一个customer filed NOT in my model?
- C++内存布局