二叉链表的定义与基本操作实现函数
2017-06-01 17:08
756 查看
#include<stdio.h> #include<stdlib.h> typedef int TElemtype; typedef struct BiTNode{ TElemtype data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; #include"binary_tree.h" main() { BiTree T,T1,T2; InitBiTree(T); InitBiTree(T1); printf("提示输入-1代表为空!"); putchar(10); CreateBiTree(T); // int x; // scanf("%d",&x); // int xroot; // xroot= Xfind(T,x); // printf("%d",xroot); putchar(10); int u,k; printf("总结点数:%d\n",u=JDcount(T)); printf("叶子节点数:%d\n",k=YJDcount(T)); BiTreeEmpty (T); putchar(10); int high; high=BiTreeDepth(T); printf("深度为:%d",high); putchar(10); PreOrderTraverse(T); putchar(10); InOrderTraverse (T); putchar(10); PostOrderTraverse (T); putchar(10); CreateBiTree(T1); int a=xiangsi(T,T1); if(a==1)printf("相似"); else printf("不相似"); putchar(10); DestroyBiTree(T); BiTreeEmpty (T); return 0; } /*~~~~~~~~~~~~~~~~~~*/ void InitBiTree(BiTree &T) //初始化二叉树T { T=(BiTree)malloc(sizeof(BiTNode)); if(!T)exit(-2); } int CreateBiTree(BiTree &T) //按先序遍历序列建立二叉链表T { TElemtype e; scanf("%d",&e); if(e==-1) { T=NULL; } else { T=(BiTree)malloc(sizeof(BiTNode)); if(!T)exit(-2); T->data=e; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } return 1; } bool BiTreeEmpty (BiTree T) //检查二叉树T是否为空,空返回1,否则返回0 { if(T==NULL) { printf("Destroyed!"); return 1; } else { printf("二叉树不为空!"); return 0; } } int BiTreeDepth(BiTree T) //求二叉树T的深度并返回该值 { int a=0,b=0; if(T==NULL) { return 0; } else { a=BiTreeDepth(T->lchild); b=BiTreeDepth(T->rchild); } return a>b ? a+1:b+1; } void PreOrderTraverse (BiTree T) //先序遍历二叉树T { if(T==NULL) { return; } else { printf("%d ",T->data); PreOrderTraverse (T->lchild); PreOrderTraverse (T->rchild); } } void InOrderTraverse (BiTree T) //中序遍历二叉树T { if(T==NULL) { return; } else { InOrderTraverse (T->lchild); printf("%d ",T->data); InOrderTraverse (T->rchild); } } void PostOrderTraverse (BiTree T) //后序遍历二叉树T { if(T==NULL) { return; } else { PostOrderTraverse (T->lchild); PostOrderTraverse (T->rchild); printf("%d ",T->data); } } void DestroyBiTree(BiTree &T) //销毁二叉树T { if(T) { DestroyBiTree(T->lchild); DestroyBiTree(T->rchild); free(T); T=NULL; } } int JDcount(BiTree T) { if(T!=NULL) { return 1+JDcount (T->lchild)+JDcount (T->rchild); } return 0; } int YJDcount(BiTree T) { if(T!=NULL){ if(T->lchild==NULL&&T->rchild==NULL){ return 1; }else{ return 0+YJDcount(T->lchild)+YJDcount(T->rchild); } } return 0; } int xiangsi(BiTree 4000 T,BiTree T1) { if(T==NULL&&T1==NULL) { return 1; }else if(T!=NULL&T1!=NULL){ if(xiangsi(T->lchild,T1->lchild)!=NULL&&xiangsi(T->rchild,T1->rchild)!=NULL) return 1; else return 0; } else return 0; }
相关文章推荐
- 【微软100题】定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
- 【微软100题】定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
- Python入门教程5. 字典基本操作【定义、运算、常用函数】[原创]_python_脚本之家
- C语言及程序设计提高例程-26 实现线性表基本操作的函数
- 实现无头结点单链表的基本操作函数
- C语言提高-第26/27讲: 实现线性表基本操作的函数/编写查找和排序函数
- 数据结构之栈定义及基本操作实现
- 链表的基本操作函数算法(C/C++实现)
- 第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数
- 关于使用定义函数来实现对于数组c中的元素进行筛选最大值最小值,计算平均值等操作
- 数据结构之队列定义及基本操作实现
- 数据结构之队列定义及基本操作实现
- 二叉树的基本操作 (二叉链表实现)
- Python入门教程3. 列表基本操作【定义、运算、常用函数】[原创]_python_脚本之家
- 链表基本操作的函数实现。(1)
- 第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数
- Python中函数定义及基本操作
- 第二十六课 实现线性表基本操作的函数 【项目1-4】
- 数据结构之链表定义及基本操作实现
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现