数据结构 二叉树的递归算法、前序、中序、后序遍历(c语言实现)
2015-12-18 23:08
555 查看
实验目的
1、掌握二叉树的表示与实现。2、掌握二叉树的定义、创建、遍历等基本操作的实现。
3、熟悉求二叉树深度等递归算法的设计与实现。
实验内容
问题描述:已知二叉树t,分别采用顺序存储结构、二叉链表存储结构实现求二叉树的深度,并对二叉树分别进行中序遍历。要求:
1、二叉树分别采用顺序或二叉链表存储。
2、 树中的数据类型约定为整型
3、 按先序序列创建二叉树t,用递归算法求二叉树的深度,并对二叉树分别进行前序、中序、后序遍历。
测试数据
1、输入序列:-+aØØ*bØØ-cØØdØØ/eØØfØØ创建二叉树;输出:深度:5
前序序列:-+a*b-cd/ef
中序序列:a+b*c-d-e/f
后序序列:abcd-*+ef/-
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct BiNode{
char data;
struct BiNode *lchild,*rchild;
}BiTNode,*BiTree;
void InitBiTree(BiTree T){
T=NULL;
}
void Create(BiTree &T)
{
char ch[2];
scanf("%s",&ch[0]);
if(strcmp(ch,"@")==0) {
T=NULL;
}else{
T=(BiTree)malloc(sizeof(BiNode));
T->data=ch[0];
Create(T->lchild);
Create(T->rchild);
}
}
void visit(char c){
printf("%c",c);
}
void PreOrderTraverse(BiTree T){
if(T){
visit(T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T){
if(T){
InOrderTraverse(T->lchild);
visit(T->data);
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T){
if(T){
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
visit(T->data);
}
}
int depth(BiTree T){
int ldeep,rdeep;
if(!T) return 0;
else{
ldeep=depth(T->lchild);
rdeep=depth(T->rchild);
return ldeep>rdeep?ldeep+1:rdeep+1;
}
}
int main(){
BiTree T;
int deep;
InitBiTree(T);
printf("请输入序列\n");
Create(T);
deep=depth(T);
printf("\n深度:%d\n二叉树构建完毕",deep);
printf("\n先序遍历二叉树:");
PreOrderTraverse(T);
printf("\n中序遍历二叉树:");
InOrderTraverse(T);
printf("\n后序遍历二叉树:");
PostOrderTraverse(T);
return 0;
}
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- AVL树-自平衡二叉查找树(Java实现)
- 如何写好 C main 函数
- C#数据结构之顺序表(SeqList)实例详解
- Lua和C语言的交互详解
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#数据结构之单链表(LinkList)实例详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C++基于栈实现铁轨问题
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法