问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

二叉树的遍历操作实现

发布网友 发布时间:2022-04-25 14:08

我来回答

2个回答

热心网友 时间:2022-04-16 02:43

// 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语言做的

热心网友 时间:2022-04-16 04:01

3. 根据建立的二叉树的二叉链存贮结构,进行二叉树的遍历,输出相应序列
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
苹果电脑电池充不进电苹果电脑充不进去电是怎么回事 苹果电脑不充电没反应苹果电脑充电指示灯不亮充不了电怎么办 狗狗更加忠诚护家、善解人意,养一只宠物陪伴自己,泰迪能长多大... 描写泰迪狗的外形和特点的句子 国外留学有用吗 花钱出国留学有用吗 !这叫什么号 百万医疗赔付后是否可以续保 前一年理赔过医疗险还能续保吗? 医疗住院险理赔后还能购买吗? 编写按层次顺序(同一层从左至右)遍历二叉树的算法 二叉树 按层遍历 递归的算法 二叉树的层次遍历以及用层次遍历算法显示所有叶子节点 设完成二叉树按层次(同一层自左至右)遍历的算法。 南京2015年三级公共营养师上半年考试试题 公共营养师的考试试题???哪能下载 二级营养师营养学基础试题中有简答和论述题? 公共营养师考试试卷共几道题,都是什么类型? 2020营养师基础知识试题及答案(7) “安了”是什么意思啊? 用“安”组词有哪些? 安()()() 中国目前手机网络运营商有哪些啊?GSM,CDMA,WCDMA分别指什么? 装宽带用哪家运营商好??? 家庭上网用哪个运营商比较好啊 拉宽带用哪家运营商的好?怎么选? 哪个运营商的宽带最好 家里想安宽带,三个运营商选择哪个比较好? 我的抖音作品评论不小心被我删了,怎么找回 我的抖音作品评论不小心被我删了,怎么找回? 试完成二叉树按层次(同一层自左至右)遍历的算法。 用c语言编一个算法 按层次遍历二叉树的结点? 在按层次遍历二叉树的算法中,需要借助的辅助数据结构是 海城市人力资源和社会保障局官网 二叉树遍历演示 海城市劳动局电话是多少? 前序遍历建立数据类型为float二叉树,按层次遍历二叉树输出 在海城办社保卡什么时间给发卡? java实现二叉树层次遍历 海城社保局个人查询老农保 试用文字表达按照层次遍历二叉树的思想。 鞍山市人力资源和社会保障局网 以二叉连表做存储结构,试编写按层次顺序遍历二叉树的算法 辽宁省人力资源和社会保障局官网 二叉树层次遍历问题,高手帮忙啊~ 辽宁海城伤残在哪个部门鉴定 海城个人如何办社保 社保局和人力资源与社会保障局是啥关系???乡镇、社保局哪个好些?? 微信好友被删了,自己又不知道他的了。怎么找回? 把微信好友删除了!我怎么找回他的微信!没有记住,也没有手机号