二叉树的三大遍历与求高度和结点
来源:互联网 发布:js div展开收缩 编辑:程序博客网 时间:2024/05/31 13:16
#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
- 二叉树的三大遍历与求高度和结点
- 求二叉树的高度、结点数和叶结点数
- 求二叉树的高度、结点数和叶结点数
- 树与图的应用:二叉树的构造、遍历和求叶子数和高度
- 二叉树的创建与遍历&二叉树的高度&二叉树每层结点个数&复制二叉树
- 二叉树的叶结点和高度
- 二叉树的先序中序后序以及递归算法求高度和结点数目
- 求二叉树的高度与宽度
- 二叉树的创建,插入,删除,输出,求高度,求度以及三种遍历方式实现
- 求二叉树的高度和宽度
- 计算二叉树的高度和结点数
- 计算二叉树的高度和结点数
- 1019_计算二叉树的高度和结点数
- 计算二叉树的高度和结点数
- 二叉树的建立、遍历、查询、求高度
- 层次遍历求二叉树的高度(非递归)
- 求二叉树的高度,叶子节点个数,第K层结点个数,求祖先结点问题
- 二叉树的【深/高度】【度为0/1/2的结点数】【遍历】【查找】【销毁】
- GO语言编译程序部署到linux下
- MapReduce Input Split(输入分/切片)详解
- git+github的使用-最简单的入门教程
- noip2017 Day1 T3 逛公园
- 96. Unique Binary Search Trees
- 二叉树的三大遍历与求高度和结点
- elasticsearch的分布式配置
- python入门
- jsp中提示信息
- Kali Linux虚拟机安装完整安装过程及简单配置(视频)
- SRS 代码分析【FLV文件解析】
- 配置基于主机名的虚拟主机实现服务器单IP跑多个web应用
- [LeetCode]714. Best Time to Buy and Sell Stock with Transaction Fee
- 【bat】1kb病毒查杀程序