数据结构之---C语言实现二叉树的二叉链表存储表示
2015-06-13 21:28
627 查看
//二叉树的二叉链表存储表示 //杨鑫 #include <stdio.h> #include <stdlib.h> #define max(a, b) a > b ? a : b //自定义max()函数 typedef char TELemType; //定义结二叉树的构体 typedef struct BTree { TELemType data; struct BTree *lChild; struct BTree *rChild; }BinTree; //二叉树的创建 BinTree* CreateTree(BinTree *T) { char temp; scanf("%c", &temp); if(temp == '0') return 0; T = (BinTree *)malloc(sizeof(BinTree)); T->data = temp; T->lChild = CreateTree(T->lChild); //递归创建左子树 T->rChild = CreateTree(T->rChild); //递归创建右子树 return T; } //计算叶子结点的数量 int sumleft(BinTree *T) { int sum = 0, leftNum, rightNum; if(T) { if((!T->lChild) && (!T->rChild)) { sum++; } leftNum = sumleft(T->lChild); sum += leftNum; rightNum = sumleft(T->lChild); sum += rightNum; } return sum; } //先序遍历二叉树 void PreOrderTraverse(BinTree *T) { if(T) { printf("%c", T->data); PreOrderTraverse(T->lChild); PreOrderTraverse(T->rChild); } } //中序遍历二叉树 void InOrderTraverse(BinTree *T) { if(T) { InOrderTraverse(T->lChild); printf("%c", T->data); InOrderTraverse(T->rChild); } } //后序遍历二叉树 void PostOrderTraverse(BinTree *T) { if(T) { PostOrderTraverse(T->lChild); PostOrderTraverse(T->rChild ); printf("%c",T->data ); } } //统计树的深度 int getDepth(BinTree *T) { int dep = 0, depleft, depright; if(!T) dep = 0; else { depleft = getDepth(T->lChild); depright = getDepth(T->rChild); dep = 1 + max(depleft, depright); } return dep; } int main() { BinTree *Tree; Tree = CreateTree(Tree); printf("=========分隔符============\n\n"); printf("二叉树的先序遍历:\n"); PreOrderTraverse(Tree); printf("\n"); printf("二叉树的中序遍历:\n"); InOrderTraverse(Tree); printf("\n"); printf("二叉树的后序遍历:\n"); PostOrderTraverse(Tree); printf("\n"); printf("\n=========================\n"); printf("叶子结点数为: %d\n", sumleft(Tree)); printf("二叉树的深度为:%d\n", getDepth(Tree)); return 0; }
如图:
相关文章推荐
- leetcode--Construct Binary Tree from Inorder and Postorder Traversal
- leetcode--Invert Binary Tree
- (DBA之路【九】)B树以及他的兄弟们
- c数据结构线性表的总结
- 数据结构系列之平衡树(DSW法构建)
- 快速排序
- c数据结构链式存储-静态链表
- c数据结构链式存储
- 数据结构练习题——先序遍历二叉树
- HashMap的数据结构
- 算法导论——初初见面
- 动手实现 数据结构 之 “十字链表”
- [葫芦娃的成长之路]数据结构的预备知识
- JAVA深入回顾数据结构
- 数据结构-图之基本概念
- 数据结构(三)---队列:
- 数据结构基础(3)---C语言实现单链表
- 数据结构基础(2)---链表基础概念
- [葫芦娃的成长之路]数据结构的预备知识
- COJ 0358 xjr考考你数据结构(根号3)线段树区间修改