C二叉树的基本操作---创建、遍历、求深度、求叶子结点
2016-07-13 18:41
453 查看
实现代码
运行结果:
#include <stdio.h> #include <stdlib.h> #include <malloc.h> typedef int ElemType; //数据类型 //定义二叉树结构,与单链表相似,多了一个右孩子结点 typedef struct BiTNode{ ElemType data; //数据域 struct BiTNode *lChild, *rChlid; //左右子树域 }BiTNode, *BiTree; //先序创建二叉树 int CreateBiTree(BiTree *T) { ElemType ch; ElemType temp; scanf("%d", &ch); temp = getchar(); if (ch == -1) *T = NULL; else { *T = (BiTree)malloc(sizeof(BiTNode)); if (!(*T)) exit(-1); (*T)->data = ch; printf("输入%d的左子节点:", ch); CreateBiTree(&(*T)->lChild); printf("输入%d的右子节点:", ch); CreateBiTree(&(*T)->rChlid); } return 1; } //先序遍历二叉树 void TraverseBiTree(BiTree T) { if (T == NULL) return; printf("%d ", T->data); TraverseBiTree(T->lChild); TraverseBiTree(T->rChlid); } //中序遍历二叉树 void InOrderBiTree(BiTree T) { if (T == NULL) return; InOrderBiTree(T->lChild); printf("%d ", T->data); InOrderBiTree(T->rChlid); } //后序遍历二叉树 void PostOrderBiTree(BiTree T) { if (T == NULL) return; PostOrderBiTree(T->lChild); PostOrderBiTree(T->rChlid); printf("%d ", T->data); } //二叉树的深度 int TreeDeep(BiTree T) { int deep = 0; if (T) { int leftdeep = TreeDeep(T->lChild); int rightdeep = TreeDeep(T->rChlid); deep = leftdeep >= rightdeep ? leftdeep + 1 : rightdeep + 1; } return deep; } //求二叉树叶子结点个数 int Leafcount(BiTree T, int &num) { if (T) { if (T->lChild == NULL &&T->rChlid == NULL) num++; Leafcount(T->lChild, num); Leafcount(T->rChlid, num); } return num; } //主函数 int main(void) { BiTree T; BiTree *p = (BiTree*)malloc(sizeof(BiTree)); int deepth, num = 0; printf("请输入第一个结点的值,-1表示没有叶结点:\n"); CreateBiTree(&T); printf("先序遍历二叉树:\n"); TraverseBiTree(T); printf("\n"); printf("中序遍历二叉树:\n"); InOrderBiTree(T); printf("\n"); printf("后序遍历二叉树:\n"); PostOrderBiTree(T); printf("\n"); deepth = TreeDeep(T); printf("树的深度为:%d", deepth); printf("\n"); Leafcount(T, num); printf("树的叶子结点个数为:%d", num); printf("\n"); return 0; }
运行结果:
相关文章推荐
- 创业维艰 读书笔记
- PHP 7.0 新特性
- 全球3G WCDMA频段划分
- 关于这段时间学习 EntityFramework的 一点感悟
- PHP下载功能代码实现
- Linux切换到root用户失败原因
- Mysql在大型网站的应用架构演变
- 聚类
- 字符串匹配
- redis info命令中各个参数的含义
- (4.6.19)Android性能分析工具整理汇总
- HDU 4305 Lighting(生成树计数+点在线段判断)
- Codeforces 56D Changing a String
- nginx支持pathinfo模式
- Workstatlon 12 PRO 安装步骤
- 一个Windows 系统究竟有多复杂?
- DOM编程艺术(音频、视频)
- XML详解
- Android自定义View——实现理财类APP七日年化收益折线图效果
- ASP.NET: Web deployment task failed.