求数据结构做二叉树实验的心得体会、、、
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求数据结构做二叉树实验的心得体会、、、相关的知识,希望对你有一定的参考价值。
心得体会、、、、
参考技术A #include<stdio.h>#include<stdlib.h>
typedef struct BNode
char data;
struct BNode *lchild;
struct BNode *rchild;
BTNode;
typedef BTNode *BinTree;
void CreateBinTree(BinTree *root)//以先序来建立二叉树
char ch;
if((ch=getchar())==' ')//这个代表空格,可换别的字符
*root=NULL; //建立空二叉树
else
*root=(BTNode*)malloc(sizeof(BTNode));//开辟空间,生成节点
(*root)->data=ch;
CreateBinTree(&((*root)->lchild)); //递归生成根的左子树
CreateBinTree(&((*root)->rchild)); //递归生成根的右子树
int main()
BinTree root;
CreateBinTree(&root);
return 0;
很多类似的,随便给你找了个本回答被提问者采纳
二叉树的建立及基本操作
实验要求:
用C语言编程实现二叉树的基本操作,并完成下述函数功能:
(1) CreateBiTree( ):根据先序遍历序列生成一棵二叉树
(2) CountLeaf( ):统计该二叉树中叶子结点的个数
(3) InOrderTraverse( ):中序遍历二叉树
(4) PostOrderTraverse( ):后序遍历二叉树
在主函数main( )中调用各个子函数完成二叉树的基本操作。
[实现提示]
采用特殊符号,如*号表示空树的情况。
通过输入扩展的先序序列建立一棵二叉树。
[测试数据]
由学生自己确定,注意边界数据。
程序检查时,由老师提供用于建树的初始输入序列。
具体代码如下:
#include<stdio.h>
#include<stdlib.h>
#define MAX 40
typedef struct node//二叉树结点定义
char data;
struct node *lChild;//左孩子
struct node *rChild;//右孩子
BTNode;
//*************************************二叉树操作***************************************
void Initial_BT(BTNode * &b)
b=NULL;
void Creat_BT(BTNode * &b)//创建二叉树
BTNode *St[MAX];//用栈辅助实现二叉树的建立
BTNode *p=NULL;
b=NULL;
int top=-1;//栈指针
int k;//k为左右孩子标示(1为左孩子、2为右孩子)
char ch;
printf("Enter the binary tree:\n");
ch=getchar();
while(ch!='\n')
switch(ch)
case '('://左孩子
top++;
St[top]=p;
k=1;
break;
case ')':
top--;
break;
case ','://右孩子
k=2;
break;
default:
p=(BTNode *)malloc(sizeof(BTNode));
p->data=ch;
p->lChild=p->rChild=NULL;
if(!b)//如果为根节点
b=p;
else
switch(k)
case 1:
St[top]->lChild=p;
break;
case 2:
St[top]->rChild=p;
break;
ch=getchar();//继续读入数据
void InOrder(BTNode *b)//中序遍历
if(b)
InOrder(b->lChild);
printf("%c",b->data);
InOrder(b->rChild);
void PostOrder(BTNode *b)//后序遍历
if(b)
PostOrder(b->lChild);
PostOrder(b->rChild);
printf("%c",b->data);
int Leaf_Sum(BTNode *b)
if(!b)
return 0;
else if(b->lChild == NULL && b->rChild == NULL)
return 1;
else
return Leaf_Sum(b->lChild)+Leaf_Sum(b->rChild);
void Start()
BTNode *b;//二叉树
char choice;
b=(BTNode *)malloc(sizeof(BTNode));
Initial_BT(b);
GOTO:system("cls");
printf("\t\t1.创建二叉树.\n"
"\t\t2.中序遍历.\n"
"\t\t3.后序遍历.\n"
"\t\t4.叶子结点个数.\n"
"\t\t5.退出.\n");
printf("输入你的选择:");
GOTO1:choice=getchar();
switch(choice)
case '1':
getchar();
Creat_BT(b);
system("pause");
goto GOTO;
case '2':
InOrder(b);
printf("\n");
system("pause");
getchar();
goto GOTO;
case '3':
PostOrder(b);
printf("\n");
system("pause");
getchar();
goto GOTO;
case '4':
printf("共有%d个叶子结点\n",Leaf_Sum(b));
system("pause");
getchar();
goto GOTO;
case '5':
system("pause");
break;
default:
printf("输入错误!\n"
"重新输入:");
goto GOTO1;
int main()
Start();
return 0;
希望能帮助你哈 参考技术A #include<stdio.h>
#include<malloc.h>
typedef char DataType;
typedef struct BTNode
DataType data;
struct BTNode * lchild;
struct BTNode * rchild;
BTNode,*BiTree;
void CreateBiTree(BiTree *T)
DataType ch;
scanf("%c",&ch);
if(ch=='#')
*T=NULL;
else
*T=(BiTree)malloc(sizeof(BTNode));
if(!(*T))
exit(-1);
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
void preorder(BTNode *bt)
if(bt==NULL)
return;
else
printf("%c",bt->data);
preorder(bt->lchild);
preorder(bt->rchild);
void inorder(BTNode *bt)
if(bt==NULL)
return;
else
inorder(bt->lchild);
printf("%c",bt->data);
inorder(bt->rchild);
void postorder(BTNode *bt)
if(bt==NULL)
return;
else
postorder(bt->lchild);
postorder(bt->rchild);
printf("%c",bt->data);
void mian()
BiTree *T=NULL;
CreateBiTree(T);
printf("先序遍历结果为:");
preorder(*T);
printf("中序遍历结果为:");
inorder(*T);
printf("后序遍历结果为:");
postorder(*T);
以上是关于求数据结构做二叉树实验的心得体会、、、的主要内容,如果未能解决你的问题,请参考以下文章
我们数据结构实验课让用C++做一个二叉树的遍历的程序,老师也没讲过具体怎么弄,求高手解答!