早教吧 育儿知识 作业答案 考试题库 百科 知识分享

二叉树的遍历操作实现二.实验内容与要求1.建立二叉树二叉链存贮结构。2.根据二叉树的括号表示方法,建立一棵二叉树。3.根据建立的二叉树的二叉链存贮结构,进行二叉树的遍历,输

题目详情
二叉树的遍历操作实现
二. 实验内容与要求
1.建立二叉树二叉链存贮结构。
2. 根据二叉树的括号表示方法,建立一棵二叉树。
3. 根据建立的二叉树的二叉链存贮结构,进行二叉树的遍历,输出相应序列。
4. 对建立的二叉树求其叶子结点数、度为2的结点数、求树的高度、以括号表示法输出二叉树。
没人知道啊
▼优质解答
答案和解析
// S_lbecs.cpp : 定义控制台应用程序的入口点。
//链表二叉树的定义和操作
#include "stdafx.h"
#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include "stdlib.h"
#define Max 20 //最大节点个数
typedef struct node{
char data;
struct node *lchild,*rchild; //左边孩子的指针 和 右边孩子的指针
}BinTNode;
typedef BinTNode *BinTree; //定义二叉树的指针
int NodeNum,leaf; //NodeNum是结点数 leaf是叶子数
//基于先序遍历算法创建二叉树
//要求输入先序序列,其中加入虚结点“#”以示空指针的位置
BinTree CreatBinTree(void){
BinTree T;
char ch;
scanf("%c",&ch);
if(ch=='#') //读入# 返回空指针
return(NULL);
else{
T=(BinTNode *)malloc(sizeof(BinTNode)); //生成结点
T->data=ch;
T->lchild=CreatBinTree(); //构造左子树
T->rchild=CreatBinTree(); //构造右子树
return(T);
}
}
//DLR 先序遍历
//访问根节点 先序遍历左子树 先序遍历右子树
void Preorde(BinTree T){
if(T){
printf("%c",T->data); //访问结点 D
Preorde(T->lchild); //先序遍历左子树 L
Preorde(T->rchild); //先序遍历右子树 R
}
}
//LDR 中序遍历
void Inorder(BinTree T){
if(T){
Inorder(T->lchild); //中序遍历左子树 L
printf("%c",T->data); //访问结点 D
Inorder(T->rchild); //中序遍历右子树 R
}
}
//LRD 后序遍历
void Postorder(BinTree T){
if(T){
Postorder(T->lchild); //后序遍历左子树 L
Postorder(T->rchild); //后序遍历右子树 R
printf("%c",T->data); //访问结点 D
}
}
//采用后序遍历求二叉树的深度、结点数及叶子数的递归算法
int TreeDepth(BinTree T){
int hl,hr,max;
if(T){
hl=TreeDepth(T->lchild); //求左深度
hr=TreeDepth(T->rchild); //求右深度
max=hl>hr?hl:hr; //取最大深度
NodeNum=NodeNum+1; //求结点数
if(hl==0&&hr==0) //若左右深度都为0 则为叶子
leaf=leaf+1;
return(max+1);
}else{
return(0);
}
}
//利用“先进先出”(FIFO)队列,按层次遍历二叉树
void Levelorder(BinTree T){
int front=0,rear=1;
BinTNode *cq[Max],*p; //定义结点的指针数组cq
cq[1]=T; //根入队
while(front!=rear){
front=(front+1)%NodeNum;
p=cq[front]; //出队
printf("%c",p->data); //输出结点的值
if(p->lchild!=NULL){
rear=(rear+1)%NodeNum;
cq[rear]=p->lchild; //左子树入队
}
if(p->rchild!=NULL){
rear=(rear+1)%NodeNum;
cq[rear]=p->rchild; //右子树入队
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
BinTree root;
int i,depth; //最大深度
printf("\n创建二叉树;输入完全二叉树先序序列:");
//用#代表虚结点 如ABD###CE##F##
root=CreatBinTree(); //创建二叉树 返回根结点
printf("\n创建成功!\n");
do{ //从菜单中选择遍历方式,输入序号。
printf("\t********** select ************\n");
printf("\t1: 先序遍历\n");
printf("\t2: 中序遍历\n");
printf("\t3: 后序遍历\n");
printf("\t4: 求树的深度及叶子数\n");
printf("\t5: 按层次遍历\n"); //按层次遍历之前,先选择4,求出该树的结点数。
printf("\t0: 退出\n");
printf("\t*******************************\n请选择:");
scanf("%d",&i); //输入菜单选项 0-5
switch(i){
case 1:
//1: 先序遍历 Preorde
printf("先序遍历的结果是");
Preorde(root); //
printf("\n");
break;
case 2:
//2: 中序遍历 Inorder
printf("中序遍历的结果是");
Inorder(root); //
printf("\n");
break;
case 3:
//3: 后序遍历 Postorder
printf("后序遍历的结果是");
Postorder(root); //
printf("\n");
break;
case 4:
//4: 求树的深度及叶子数 TreeDepth
depth=TreeDepth(root); //
printf("数的深度=%d 结点数=%d",depth,NodeNum);
printf(" 叶子数=%d",leaf);
printf("\n");
break;
case 5:
//5: 按层次遍历 Preorde
printf("按层次遍历的结果是");
Levelorder(root); //
printf("\n");
break;
default:
printf("输入错误\n");
break;
}

}while(i!=0);
return 0;
}
是vs做的 有些地方需要改下 是C语言做的
看了 二叉树的遍历操作实现二.实验...的网友还看了以下:

《中共中央关于全面推进依法治国若干重大问题的决定》提出要“深入推进依法行政,加快建设法治政府”:各  2020-07-11 …

感谢消逝,我们在行进作文  2020-07-12 …

有没有什么实验是只有在太空环境之下才可以进行?最好告诉我一下实验所需的步骤和方法,最好可以不用动手再  2020-11-03 …

考场作文中,考生比较不会在下面三种作文类型选择哪一种呢?进来提提看法吧.A、谈人生哲理B、抒发对英雄  2020-11-06 …

2013年8月,党在历史上首次进行党内法规进行集中清理工作。300个中央“红头文件”正式被废止和宣布  2020-11-07 …

我与12.4同行文章为纪念“12.4”全国法制宣传日确立十周年,促进“五五”法制宣传教育各项工作圆满  2020-11-07 …

依法决策、依法办事、政务公开、规范执法……现在,中国的各级政府正自觉地把依法行政作为工作的基本准则,  2020-11-27 …

阅读材料,回答问题。材料一近年来,我国依法制定和颁布了一系列促进依法行政的法律法规,依法行政工作取得  2020-12-13 …

《中华人民共和国各级人民代表大会常务委员会监督法》规定,各级人民代表大会常务委员会对本级人民政府的工  2020-12-26 …

《中华人民共和国各级人民代表大会常务委员会监督法》规定,各级人民代表大会常务委员会对本级人民政府的工  2020-12-26 …