通过上机实践,帮助学生进一步掌握指针变量和动态变量的含义,掌握二叉树的结构特性,以及各种存储结构的特点及适用范围,掌握用指针类型描述、访问和处理二叉树的运算。 【实验内容】 实验题目一:层序遍历二叉树 【实验步骤】 1 已知二叉树以二叉链表作为存储结构,写一个算法按层序遍历它,通过程序在终端屏幕上打印出它的层序序列。 2 先建立二叉树的二叉链表存储结构,再遍历它。 3 利用队列完成算法。 编程实现以二叉链表存储的二叉树的中序遍历的非递归算法。 编程实现二叉树的中序线索链表的生成(线索化)及其遍历的算法。 实验题目二:交换二叉树的所有结点的左右子树 【实验步骤】 1 已知二叉树以二叉链表作为存储结构,写一个算法交换该二叉树的所有结点的左右子树。 2 先建立二叉树的二叉链表存储结构,再完成算法,注意结果的输出形式! 3 利用栈。可设二叉树的根指针为 t,且以二叉链表表示,可利用一个指针栈来实现,且设栈单元包括数据域和指针域,当树非空时,将当前的树根结点进栈,同时将当前栈顶元素出栈当作根结点,然后依据当前的根结点是否具有孩子结点来判定是否将其左右指针交换;再将交换后的左指针或右指针入栈,如此反复,直到栈空。 【程序说明】 该程序集成了如下功能: (1) 二叉树的建立 (2) 递归和非递归先序,中序和后序遍历二叉树 (3) 按层次遍历二叉树 (4) 交换二叉树的左右子树 (5) 输出叶子结点 (6) 递归和非递归计算叶子结点的数目 #include #include #include #include #include typedef struct Binnode{ char data; struct Binnode *lchild; struct Binnode *rchild; }Binnode; /*按照前序遍历建立二叉树*/ void Creat_Bintree(Binnode **t) { char ch; scanf("\n%c",&ch); if(ch=='0') *t=NULL; else { *t=(Binnode*)malloc(sizeof(Binnode)); if(!*t)exit(OVERFLOW); (*t)->data=ch; printf("%c: left",ch); Creat_Bintree(&(*t)->lchild); printf("%c: right",ch);Creat_Bintree(&(*t)->rchild); } } /*按照前序递归遍历二叉树*/ void Preorder1(Binnode *t) { if(t!=NULL) { printf("%c",t->data); Preorder1(t->lchild); Preorder1(t->rchild); } } /*按照中序递归遍历二叉树*/ void Inorder1(Binnode *t) { /* printf("\n 输...