二叉树的先序中序后序以及递归算法求高度和结点数目
来源:互联网 发布:入骨相思知不知福禄 编辑:程序博客网 时间:2024/04/20 19:44
#include "stdio.h"//定义结点typedef struct Node{ char data; struct Node * LChild; struct Node * RChild;}BiTNode,*BiTree;//创建树void CreateBiTree(BiTree * bt){ char ch; ch = getchar(); if(ch=='.') *bt=NULL; else { *bt=(BiTree)malloc(sizeof(BiTNode)); (*bt)->data=ch; CreateBiTree(&((*bt)->LChild)); CreateBiTree(&((*bt)->RChild)); }}//先序遍历二叉树void PreOrder(BiTree root){ if(root!=NULL) { printf("%c ",root->data);//访问根结点 PreOrder(root->LChild);//先序遍历左子树 PreOrder(root->RChild);//先序遍历右子树 }}//中序遍历二叉树void InOrder(BiTree root){ if(root!=NULL) { InOrder(root->LChild);//中序遍历左子树 printf("%c ",root->data);//访问根结点 InOrder(root->RChild);//中序遍历右子树 }}//后序遍历二叉树void PostOrder(BiTree root){ if(root!=NULL) { PostOrder(root->LChild);//后序遍历左子树 PostOrder(root->RChild);//后序遍历右子树 printf("%c ",root->data);//访问根结点 }}//先序遍历输出二叉树的结点void PreOrder1(BiTree root) //先序遍历输出二叉树的结点,为指向二叉树根结点的指针{ if(root!=NULL) { printf("%c ",root->data);//输出根结点 PreOrder1(root->LChild);//先序遍历左子树 PreOrder1(root->RChild);//先序遍历右子树 }}//后序遍历统计二叉树的结点的个数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 main(){ printf("请输入二叉树:\n"); BiTree root; CreateBiTree(&root); printf("先序遍历:\n");//输出先序遍历的结果 PreOrder(root); printf("\n中序遍历:\n");//输出中序遍历的结果 InOrder(root); printf("\n后序遍历:\n");//输出后序遍历的结果 PostOrder(root); printf("\n输出叶子结点:\n");//输出叶子结点 PreOrder1(root); leaf(root); printf("\n输出叶子结点数目:\n%d",leaf(root));//输出叶子结点的数目 PostTreeDepth(root); printf("\n输出二叉树的高度:\n%d",PostTreeDepth(root));//输出二叉树的高度}//下面是二叉树的输入/*ABDE..F...CGI...HJ..K.L..*/
阅读全文
0 0
- 二叉树的先序中序后序以及递归算法求高度和结点数目
- 树-----求叶子结点数目,结点数目,树的高度
- 二叉树中序遍历递归算法,求树的高度,以及拷贝树
- 编写递归算法,计算二叉树中叶子结点的数目
- 二叉树各种遍历的实现(递归、非递归、层次、高度和节点数目)
- 二叉树中递归算法的两个应用——数(非)叶子结点的数目和判断是否是排序二叉树
- 二叉树基本算法,递归非递归遍历以及求高度、宽度等
- 求二叉树的高度、结点数和叶结点数
- 求二叉树的高度、结点数和叶结点数
- 以二叉链表为存储结构, 试编写计算二叉树中叶子结点数目的递归算法.
- 求二叉树的高度(非递归)
- 递归求二叉树的高度
- 递归求二叉树的高度
- 二叉树的叶结点和高度
- 递归建立二叉查找树(BST)以及递归求树的高度
- 二叉树-求结点m所在子树中包括的结点的数目
- 求二叉树深度的递归和非递归算法
- 二叉树(递归遍历和非递归遍历)(递归求树的高度以及叶子节点数和拷贝树)
- LeetCode-1
- 第一章:对象导论
- 04 Anykey右分页布局TableLayout
- F
- 总结-2017/11/26
- 二叉树的先序中序后序以及递归算法求高度和结点数目
- 96. Unique Binary Search Trees
- 算法二---排序(1)
- 【ccfcsp 201709-2】公共钥匙盒
- 结构体内的内存对齐问题
- 动态sql 和重定向
- Huffman codes
- node 设置最大监听数
- Rebuilding Roads (树形dp+背包)