数据结构实验之二叉树的遍历

来源:互联网 发布:掌上电力网络有问题 编辑:程序博客网 时间:2024/05/23 11:56

【实验内容】

创建一个二叉树,对这棵动态二叉树进行分析,将其用静态二叉链表表示。二叉树的动态二叉链表结构中的每个结点有三个字段:data,lchild,rchild。静态二叉链表是用数组作为存储空间,每个数组元素存储二叉树的一个结点,也有三个字段:data,lchild,rchild。lchild和rdhild分别用于存储左右孩子的下标。
【实验源码】:

#include<stdio.h>#include<stdlib.h>//二叉树结点定义typedef struct BITNode{char  data;struct BITNode *lchild,*rchild;}BITNode,*BITree;static int length=0;//二叉树结点个数//静态二叉链表typedef struct ATNode{char  data;int lchild;int rchild;}ATNode;ATNode  Array[100];//存储二叉链表结点//先序创建二叉树void CreateBITree(BITree *T){char ch;scanf("%c",&ch);if(ch=='#')*T=NULL;else{*T=(BITree )malloc(sizeof(BITNode));       (*T)->data=ch;CreateBITree(&((*T)->lchild));CreateBITree(&((*T)->rchild));}}//先序遍历二叉树void VisitBitree(BITree T){if(T){printf("%c->",T->data); length++;Array[length].data=T->data;VisitBitree(T->lchild);//访问左孩子VisitBitree(T->rchild);//访问右孩子}}//二叉树转化为静态二叉链表void BitreeTransform(BITree T){int i,j;if(T){j=1;        while(T->data!=Array[j].data)j++;//确定T结点的数组下标if(T->lchild!=NULL){i=1;while(T->lchild->data!=Array[i].data)i++;//确定T->lchild结点的数组下标            Array[j].lchild=i;}elseArray[j].lchild=0;if(T->rchild!=NULL){i=1;while(T->rchild->data!=Array[i].data)i++;//确定T->rchild结点的数组下标            Array[j].rchild=i;}elseArray[j].rchild=0;BitreeTransform(T->lchild);BitreeTransform(T->rchild);}}void main (){printf("请先序方式输入二叉树的节点值:\n");BITree T=NULL;//T为空二叉树CreateBITree(&T);//创建一棵二叉树printf("按先序次序输出二叉树节点中的值:\n");         VisitBitree(T);printf("\n\n");    BitreeTransform(T);printf("二叉树的静态二叉链表为:\n");printf("下标\tlchil\tddata\trchild\n");for(int j=1;j<=length;j++) {       printf("%d\t%d\t%c\t%d\n", j,Array[j].lchild, Array[j].data, Array[j].rchild); } printf("二叉静态链表长度:%d\n",length);}
1 0
原创粉丝点击