二叉树的基本操作实现
2016-10-23 17:30
204 查看
<span style="font-size:18px;"><span style="font-size:18px;">#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define PF printf("\n") int m,n,max; typedef struct BiTNode { int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;//定义二叉树 //创建二叉树 (按照前序顺序输入) void CreateBiTree(BiTree &T) { int temp; scanf("%d",&temp); if(temp==-1) T=NULL; else { T=new BiTNode; T->data=temp; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } //二叉树遍历,先序遍历 void PreOrderTraverse(BiTree &T) { if(T) { printf("%d ",T->data); PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } } //二叉树中序遍历 void InOrderTraverse(BiTree &T) { if(T) { InOrderTraverse(T->lchild); printf("%d ",T->data); InOrderTraverse(T->rchild); } } //二叉树后序遍历 void PosOrderTraverse(BiTree &T) { if(T) { PosOrderTraverse(T->lchild); PosOrderTraverse(T->rchild); printf("%d ",T->data); } } //计算结点的个数 int NodeCount(BiTree T) { if(T==NULL) return 0; else return NodeCount(T->lchild)+NodeCount(T->rchild)+1; } //计算叶子节点的个数 int CountLeaves(BiTree T) { if(T==NULL) return 0; if(T->lchild==NULL&&T->rchild==NULL) return 1; else return CountLeaves(T->lchild)+CountLeaves(T->rchild); } int Depth(BiTree T) { if(T==NULL) return 0; m=1,n=1; m+=Depth(T->lchild); n+=Depth(T->rchild); if(m>n) return m; else return n; } //交换左右子树 BiTree Exchange(BiTree &T) { BiTree p; if(T==NULL||(T->lchild==NULL&&T->rchild==NULL)) return T; p=T->lchild; T->lchild=T->rchild; T->rchild=p; if(T->lchild) T->lchild=Exchange(T->lchild); if(T->rchild) T->rchild=Exchange(T->rchild); return T; } int main() { BiTree T; T=NULL; while(1) { PF;PF;PF; printf("\t\t1、按照前序顺序的方式输入\n"); printf("\t\t2、按照前序遍历方式遍历\n"); printf("\t\t3、按照中序遍历方式遍历\n"); printf("\t\t4、按照后序遍历方式遍历\n"); printf("\t\t5、计算结点的个数\n"); printf("\t\t6、计算叶子节点的个数\n"); printf("\t\t7、计算二叉树的深度\n"); printf("\t\t8、左右子树交换\n"); printf("\t\t9、退出程序\n"); PF;PF; printf("\t请选择:"); int n,sum=0; scanf("%d",&n); switch(n) { case 1:system("cls");PF;PF; printf("请按照先序的顺序输入不同的整数(-1代表为空):"); CreateBiTree(T);getchar();break; case 2:system("cls");PF; printf("前序输出的顺序为:"); PreOrderTraverse(T);break; case 3:system("cls");PF; printf("中序输出的顺序为:"); InOrderTraverse(T);break; case 4:system("cls");PF; printf("后序输出的顺序为:"); PosOrderTraverse(T);break; case 5:system("cls");sum=NodeCount(T); printf("结点的个数为:"); printf("%d\n",sum);break; case 6:system("cls");sum=CountLeaves(T); printf("叶子结点的个数为:"); printf("%d\n",sum);break; case 7:system("cls"); printf("二叉树的深度为:"); max=Depth(T); printf("%d\n",max);break; case 8:system("cls");Exchange(T); printf("交换成功!!\n\n"); break; case 9:exit(0); } } return 0; } //1 2 4 8 -1 -1 9 -1 -1 5 -1 10 -1 -1 3 6 -1 11 -1 -1 7 -1 -1 </span></span>
相关文章推荐
- 二叉树基本操作实现(二叉树的顺序存储)
- C语言实现二叉树的基本操作---创建、遍历、求深度、求叶子结点
- 二叉树基本操作java实现及遍历浅析
- 二叉树的先序、中序、后序遍历等基本操作c++实现
- 二叉树的基本操作实现
- 二叉树基本操作实现(二叉树的链式存储)
- 二叉树基本操作的递归实现(二叉树建立,先序,中序,后序,深度的递归遍历。广度优先,高度优先的非递归遍历)
- 二叉树的基本操作-递归实现
- 二叉树基本操作的程序实现
- 【代码】C++实现二叉树基本操作及测试用例
- 八.二叉树各种操作的C语言实现 树的一些基本的操作,包括,树的建立,树的深度,
- c++学习笔记—二叉树基本操作的实现
- 二叉树基本操作--java实现
- 三叉链表实现二叉树的基本操作
- C实现二叉树BTree基本操作
- 数据结构.二叉树的基本操作(C语言实现)
- 二叉树的建立(非递归建立与定义建立)与基本操作(广度和深度遍历,求叶子树高)实现
- c++学习笔记—二叉树基本操作的实现
- 二叉树的基本操作的c++实现
- 二叉树基本操作—Java实现