资源描述:
《实验5二叉树的基础实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验五二叉树的基础实验定义二叉树的数据结构并完成建树、删除和添加结点及先序、中序和后序遍历的递归算法#include"stdafx.h"#include#include#include#defineOK1#defineOVERFLOW-2#defineERROR0#defineFALSE0typedefintStatus;typedefstructBiTNode{chardata;structBiTNode*lchild,*rchild;}BiTNode,*BiTree;StatusCreateBiTree(BiTree&T){/
2、/按先序次序输入二叉树中结点的值(一个字符),空格字符表示空树,//构造二叉链表表示的二叉树T。charch;scanf("%c",&ch);if(ch=='')T=NULL;else{if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))exit(OVERFLOW);T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild);}returnOK;}StatusVisit(chare){printf("%c",e);returnOK;}//先序遍历StatusPreOrderTraverse(BiTree
3、T,StatusVisit(chare)){if(T){if(Visit(T->data))if(PreOrderTraverse(T->lchild,Visit))if(PreOrderTraverse(T->rchild,Visit))returnOK;returnERROR;}elsereturnOK;}//中序遍历StatusInOrderTraverse(BiTreeT,StatusVisit(chare)){if(T){if(PreOrderTraverse(T->lchild,Visit))if(Visit(T->data))if(PreOrderTraverse(T->rch
4、ild,Visit))returnOK;returnERROR;}elsereturnOK;}//后序遍历StatusLastOrderTraverse(BiTreeT,StatusVisit(chare)){if(T){if(PreOrderTraverse(T->lchild,Visit))if(PreOrderTraverse(T->rchild,Visit))if(Visit(T->data))returnOK;returnERROR;}elsereturnOK;}//查找结点(先序查找)StatusPreOrderLook(BiTreeT,charx,BiTree&p){//若二叉
5、树中存在和x相同的元素,则p指向该结点并返回OK,//否则返回FALSEif(T){if(T->data==x){p=T;returnOK;}else{if(PreOrderLook(T->lchild,x,p))returnOK;elsereturn(PreOrderLook(T->rchild,x,p));}}elsereturnFALSE;}StatusPPreOrderLook(BiTreeT,charx,BiTree&p){//若二叉树中存在和x相同的元素,则p指向该结点并返回OK,//否则返回FALSEif(T){if(T->lchild->data==x
6、
7、T->rchild-
8、>data==x){p=T;returnOK;}else{if(PPreOrderLook(T->lchild,x,p))returnOK;elsereturn(PPreOrderLook(T->rchild,x,p));}}elsereturnFALSE;}//释放节点以及节点的子树所占空间intDestroyBiTree(BiTree&T){if(T){if(T->lchild)DestroyBiTree(T->lchild);if(T->rchild)DestroyBiTree(T->rchild);free(T);returnOK;//T=NULL;}returnOK;}//结点的插
9、入StatusInsertNode(BiTree&T,BiTreep,charc){intb;charch;BiTrees=(BiTNode*)malloc(sizeof(BiTNode));printf("输入节点的插入位置为0则插入左节点,为1则插入右节点:");inti;cin>>i;if(T){b=PreOrderLook(T,c,p);if(b==1&&i==0){BiTreeq=p->lchild