文档介绍:实验二用递归算法遍历二叉树[实验目的]学习掌握二叉树各种遍历方法的基本操作算法。[实验内容]建立一棵二叉树,并用递归算法分别用前序、中序和后序遍历之。[实验要点及说明]由于二叉树的定义是递归的,因而一棵非空二叉树可以看作是由根结点、左子树和右子树这三个基本部分组成的。如果能依次遍历这三个部分的信息,也就遍历了整个二叉树。由此得到的二叉树的遍历是按某种策略访问二叉树中的每一个结点且仅访问一次的过程。二叉树的遍历按访问根结点的先后次序不同分为前序、中序和后序三种。前序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)访问根结点;(2)前序遍历左子树;(3)前序遍历右子树。中序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)中序遍历左子树;(2)访问根结点;(3)中序遍历右子树。后序遍历二叉树的操作定义为:若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树;(3)访问根结点。[实验要求与步骤]:采用递归算法实现前序、中序和后序遍历;::二叉树的遍历是指按照某种顺序访问二叉树中的每个结点,使每个结点被访问一次且只被访问一次;;,并进行编辑、编译、调试,直到运行成功。[参考程序]#include<>#definenull0intcounter=0;typedefstructbtreenode{intdata;structbtreenode*lchild;structbtreenode*rchild;}bnode;bnode*p;bnode*creat(intx,bnode*lbt,bnode*rbt){bnode*p;p=(bnode*)malloc(sizeof(bnode));p->data=x;p->lchild=lbt;p->rchild=rbt;return(p);}bnode*ins_lchild(bnode*p,intx){bnode*q;if(p==null)printf("Illegalinsert.");else{q=(bnode*)malloc(sizeof(bnode));q->data=x;q->lchild=null;q->rchild=null;if(p->lchild!=null)q->rchild=p->lchild;p->lchild=q;}}bnode*ins_rchild(bnode*p,intx){bnode*q;if(p==null)printf("Illegalinsert.");else{q=(bnode*)malloc(sizeof(bnode));q->data=x;q->lchild=null;q->rchild=null;if(p->rchild!=null)q->lchild=p->rchild;p->rchild=q;}}voidprorder(bnode*p){if(p==null)return;printf("%d\t%u\t%d\t%u\t%u\n",++counter,p,p->data,p->lchild,p->rchild);if(p->lchild!=null)proder(p->lchild);if(p->rchild!=null)proder(p->rchild);}voidpreorder(bnode*p){if(p==null)return;printf("%d",p->data);if(p->lchild!=null)preoder(p->lchild);if(p->rchild!=null)preoder(p->rchild);}voidinorder(bnode*p){if(p==null)return;if(p->lchild!=null)inoder(p->lchild);printf("%d",p->data);if(p->rchild!=null)inoder(p->rchild);}voidpostorder(bnode*p){if(p==null)return;if(p->lchild!=null)postoder(p->lchild);if(p->rchild!=null)postoder(p->rchild);printf("%d",p->data);}main(){bnode*bt,*p,*q;intx;printf("Inputroot:");scanf("%d",&x);p=creat(x,null,null);bt=p;scanf("%d",&x);while(x!=-1){p=bt;q=p;wihle(x!=p->data&&q!=null){p=q;if(x<p->data)q=p->lchild;el