文档介绍:实验四二叉树的操作专业姓名学号成绩[实验目的]掌握树与二叉树结点的结构及二叉树的基本操作,在二叉树基本操作的基础上,学会利用递归和非递归的方法,编写二叉树数据结构的相关操作进行处理的算法。加深对树与二叉树结构和性质的理解,逐步培养解决实际问题的编程能力。[问题描述]建立一棵二叉树;按先序、中序和后序遍历二叉树.[基本要求]实现二叉链表表示的二叉树[测试数据]测试时可指定二叉树的节点,不少于7个节点[实现提示]注意二叉树遍历的递归及非递归算法的区别。[思考]描述你所设计的算法思路及分析过程。建立二叉树:1、递归出口:当遇到*时,是空。2、建立根结点。3、建立左子树和右子树。递归算法:前序遍历:1、先判断二叉树是否为空,若为空则做空操作;2、不为空时就先访问根结点;3、按前序遍历方式访问左子树;4、再按前序遍历访问右子树;中序遍历:1、先判断二叉树是否为空,若为空则做空操作;2、不为空时就先按中序遍历访问左子树;3、然后访问根结点;4、再按中序遍历访问右子树;后序遍历:1、先判断二叉树是否为空,若为空则做空操作;2、不为空时就先按后序遍历方式访问左子树;3、再按后序遍历访问右子树;4、最后访问根结点;非递归算法:前序遍历:每遇到一个结点,先访问该结点,并把该结点的非空右子结点推入栈中,然后周游其左子树;左子树周游不下去时,从栈顶弹出待访问的结点,继续周游。中序遍历:每遇到一个结点就把它压入栈,然后去周游其左子树;周游完左子树后,从栈顶弹出并访问这个结点,然后按照其右链接指示的地址再周游该结点的右子树。后序遍历:每遇到一个结点,先把它压入栈中,去周游它的左子树;周游完它的左子树后,应该继续周游该结点的右子树;周游完右子树后,才从栈顶中弹出该结点并访问它。[源程序代码]递归算法:(结构体和类)#include<iostream>usingnamespacestd;structbinode{ chardata; binode*leftchild;//左指针域 binode*rightchild;//右指针域};//二叉链表的结点结构体classbitree//二叉链表{private: binode*root;//指向根结点的头指针 binode*creat(binode*bt)//构造函数的声明与定义 { chara; cout<<"请依次输入创建一棵二叉树的节点数据(按前序遍历输入):"<<endl; cin>>a; if(a=='*') returnNULL;//如果输入的字符为*就返回空值 else { bt=newbinode;//生成一个结点 bt->data=a;//将a赋值给根结点的数据域 bt->leftchild=creat(bt->leftchild);//递归建立左子树 bt->rightchild=creat(bt->rightchild);//递归建立右子树 } returnbt;//返回二叉链表结点的指针 } voidrelease(binode*bt)//析构函数的声明与定义 { if(bt!=NULL)//如果结点为空{ release(bt->leftchild);//释放左子树 release(bt->rightchild);//释放右子树 deletebt;//释放指针} } voidpreorder(binode*bt