数据结构 二叉树的递归算法、前序、中序、后序遍历(c语言实现)

来源:互联网 发布:淘宝不能加购物车 编辑:程序博客网 时间:2024/05/03 23:05

实验目的

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;}


1 0