1、1实验四 二叉树的建立和遍历 学院 专业 班 学号 姓名 一实习目的1. 掌握二叉链表的存储结构;2. 掌握二叉链表的建立;3. 掌握二叉树的先序遍历、中序遍历、后序遍历的递归算法;4. 掌握二叉树遍历算法的应用;二实习内容1. 按先序序列建立二叉树的二叉链表(算法 6.4)(空树用#表示)2. 对生成的二叉树分别进行先序遍历、中序遍历、后序遍历,输出结果。3 统计二叉树中结点个数; 4. 求二叉树的高度;三实验步骤1. 定义 二叉链表的存储结构#include “stdio.h“#include “stdlib.h“typedef char TElemType;typedef struct
2、BiTNodeTElemType data;struct BiTNode *lchild, *rchild; / 左右孩子指针BiTNode,*BiTree;2. 编写函数 CreateBiTree,按先序序列建立二叉树的二叉链表;测试的字符序列为 abdg#e#c#f#;程序代码为:void CreateBiTree(BiTree scanf(“%c“,if(ch=#) / 空T=NULL;elseT=(BiTree )malloc(sizeof(BiTNode); / 生成根结点if(!T)2exit(-1);T-data=ch;CreateBiTree(T-lchild);/ 递归构造左
3、子树CreateBiTree(T-rchild);/ 构造右子树2. 编写二叉树的先序遍历、中序遍历、后序遍历的递归算法int preOrderTraverse(BiTree T) / 初始条件:二叉树 T 存在,先序递归遍历 T;if(T=NULL) return 1; if(T!=NULL) / T 不空printf(“%5c“,T-data); / 访问根结点preOrderTraverse(T-lchild);/ 先序遍历左子树preOrderTraverse(T-rchild);/ 先序遍历右子树int inOrderTraverse(BiTree T) / 初始条件:二叉树 T 存
4、在,中序递归遍历 T;if(T=NULL) return 1; if(T!=NULL) / T 不空inOrderTraverse(T-lchild);/ 中序遍历左子树printf(“%5c“,T-data); / 访问根结点inOrderTraverse(T-rchild);/ 中序遍历右子树int postOrderTraverse(BiTree T) / 初始条件:二叉树 T 存在,/ 操作结果:后序递归遍历 T;if(T=NULL) return 1; if(T!=NULL) / T 不空postOrderTraverse(T-lchild);/ 后序遍历左子树postOrderTr
5、averse(T-rchild);/ 后序遍历右子树printf(“%5c“,T-data); / 访问根结点33. 编写函数统计二叉树中结点个数; (遍历算法)int countND(BiTree T) int n=0,k=0,m=0;if(T=NULL) return 0;else if(T-lchild!=NULL ) k=countND(T-lchild); / 后序遍历左子树 ,得到左子树结点个数if(T-rchild!=NULL ) m=countND(T-rchild); / 再后序遍历右子树n=m+k+1 ; return n;4. 编写函数求二叉树的高度;int Bithei
6、ght(BiTree T) int lh,rh,th;if(T=NULL)return 0; lh= Bitheight(T-lchild); / 递归求 T 的左子树的高度 lhrh= Bitheight(T-rchild); /递归求 T 的右子树的高度 rhif(lhrh) th=lh+1; else th=rh+1;return th;4. 编写 main 函数,调用函数,输出结构void main()int i,k,h ;BiTree T;printf(“请按先序输入二叉树(如:ab#表示 a 为根结点,b 为左子树的二叉树)n“);CreateBiTree(T);printf(“先
7、序遍历的结果为:n“);i=preOrderTraverse(T); printf(“n“);printf(“中序遍历的结果为:n“);i=inOrderTraverse(T);printf(“n“);printf(“后序遍历的结果为:n“);i=postOrderTraverse(T);printf(“n“);k=countND(T);4printf(“结点个数为%dn“,k); h= Bitheight(T); printf(“输出树的高度为%dn“, h);4. 运行结果 (截图)图 1.二叉树的建立和遍历四 实验小结通过本次实习,我掌握了先序、中序、后序遍历中的递归算法的使用,从而实现了对二叉树的先序、中序、后序遍历。