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

一道数据结构题目--二叉树用二叉链表表示

发布网友 发布时间:2022-05-05 23:24

我来回答

1个回答

热心网友 时间:2022-06-28 07:22

6-11 写出二叉树的先序遍历非递归算法。
答案:
#define maxsize 100
typedef struct
{
Bitree Elem[maxsize];
int top;
}SqStack;
void PreOrderUnrec(Bitree t)
{
SqStack s;
StackInit(s);
p=t;
while (p!=null || !StackEmpty(s))
《数据结构》习题解
{
while (p!=null) //遍历左子树
{
visite(p->data);
push(s,p);
p=p->lchild;
}//endwhile
if (!StackEmpty(s)) //通过下一次循环中的内嵌 while 实现右子树遍历
{
p=pop(s);
p=p->rchild;
}//endif
}//endwhile
}//PreOrderUnrec
6-12 写一算法求二叉树中结点的总数,可以写出多少种方法?
答案:
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{ char data; /*此例中二叉树的结点采用字符类型*/
struct node *lchild, *rchild;
}NODE;
NODE *crt_bt_pre( ) /*按先序遍历序列创建二叉树的二叉链表*/
{
/* 输入 ABC00DE0G00F000 */
NODE *bt;
char ch;
printf("\n\t\t\t");
scanf("%c",&ch);
getchar( );
if(ch==' ')
bt=NULL;
else
{
bt=(NODE *)malloc(sizeof(NODE));
bt->data=ch;
printf("\n\t\t\t 请输入%c 结点的左孩子:",bt->data);
bt->lchild=crt_bt_pre( );
printf("\n\t\t\t 请输入%c 结点的右孩子:",bt->data);
bt->rchild=crt_bt_pre();
}
return(bt);
}
《数据结构》习题解
void CountNode(NODE* bt,int *p) /*统计二叉树中结点的总数*/
{
if(bt==NULL)
return;
else
{
(*p)++;
CountNode(bt->lchild,p);
CountNode(bt->rchild,p);
return;
}
}
main()
{ NODE *crt_bt_pre( )
CountNode(bt,&b); /*调用统计结点总数的函数*/
printf("\n\t\t\t 该二叉树共有%d 个结点。\n",b);
}
6-13 写一算法将二叉树中所有结点的左、右子树相互交换。
答案:
#include "datastru.h"
#include <stdio.h>
#include <malloc.h>
#include "二叉树.c"
BTCHINALR *change(BTCHINALR *bt)
/*二叉树左右子树交换递归算法*/
{ BTCHINALR *p;
if(bt!=NULL)
if(bt->lchild!=NULL || bt->rchild!=NULL)
{p=(BTCHINALR*)malloc(sizeof(BTCHINALR));
p->data=bt->data;
p->rchild=NULL;
p->lchild=bt->lchild;
bt->lchild=bt->rchild;
bt->rchild=p->lchild;
bt->lchild=change(bt->lchild);
bt->rchild=change(bt->rchild);
}
return bt;
}

#include<iostream.h>
#include<stdio.h>
#include<iomanip.h>
#include<malloc.h>
#include<stdlib.h>
#include<conio.h>
#include<shlobj.h>
#define MAXNODE 100

//树的建立
typedef struct bitnode
{ char data;
struct bitnode *lchild,*rchild;
}bitnode,*bintree;

//二叉树的二叉链表的存储算法
void createbintree(bintree *t)
{ char ch;
cin>>ch;
if(ch=='0')
(*t)=NULL;
else
{ (*t)=new bitnode;
(*t)->data=ch;
createbintree(&(*t)->lchild);
createbintree(&(*t)->rchild);
}
}

//9.中序遍历
void inorderout(bintree bt)
{
if(bt!= NULL){
inorderout(bt->lchild); /* 中序遍历左子树 */
printf("%c", bt->data); /* 访问根结点 */
inorderout(bt->rchild); /* 中序遍历右子树 */
}
return;
}

/* 11.按层遍历 */
void levelorder(bintree bt)
{ bintree queue[MAXNODE];
int front,rear;
if(bt==NULL)
return;
front=-1;
rear=0;
queue[rear]=bt;
while(front!=rear)
{front++;
cout<<queue[front]->data;
if(queue[front]->lchild!=NULL)
{rear++;
queue[rear]=queue[front]->lchild;
}
if(queue[front]->rchild!=NULL)
{rear++;
queue[rear]=queue[front]->rchild;
}

}

}

/* 6.输出二叉树(前序遍历) */
void printBTree(bintree bt)
{ /* 树为空时结束递归,否则执行如下操作 */
if(bt!=NULL){
printf("%c", bt->data); /* 输出根结点的值 */
if(bt->lchild!= NULL||bt->rchild!=NULL){
printBTree(bt->lchild);
if(bt->rchild!= NULL){
}
printBTree(bt->rchild);
} }
return; }

/*求树的高度 */
int depth(bitnode *b)
{
int dep1,dep2;
if(b==NULL) return(0);
else
{
dep1=depth(b->lchild);
dep2=depth(b->rchild);
if(dep1>dep2)return(dep1+1);
else return(dep2+1);
}
}

/*所有叶子结点数 */
int countleaf(bintree bt)
{if(bt==NULL)
return 0;
if(bt->lchild==NULL&&bt->rchild==NULL)
return 1;
return (countleaf(bt->lchild)+countleaf(bt->rchild));

}

/*所有结点数 */
int btreecount(bintree bt)
{if(bt==NULL)
return 0;
else return btreecount(bt->lchild)+btreecount(bt->rchild)+1;
}

void main()
{

bintree bt;
createbintree(&bt);
printf("树的高度为:\n");
printf("%d",depth(bt));
printf("\n");
printf("叶子结点数为:\n");
printf("%d",countleaf(bt));
printf("\n");
printf("所有结点数为:\n");
printf("%d",btreecount(bt));
printf("\n");
printf("前序遍历为:\n");
printBTree(bt);
printf("\n");
printf("中序遍历为:\n");
inorderout(bt);
printf("\n");
printf("层次遍历为:");
levelorder(bt);
printf("\n");

}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果银行拒贷有哪些办法 小天鹅滚筒洗衣机水位多少合适 阴阳师百闻牌攻略大全 百闻牌式神卡组阵容大全 阴阳师百闻牌三大妖狐阵容推荐 妖狐流派怎么搭配?-新手攻略-安族网... 阴阳师百闻牌妖狐快攻阵容 怎么搭配攻略推荐 阴阳师百闻牌妖狐技能攻略 妖狐属性及卡组搭配推荐-新手攻略-安族网... 阴阳师百闻牌妖狐最强卡组 阵容怎么搭配攻略 阴阳师百闻牌妖狐卡组推荐 怎么搭配攻略分享 带鹏字的公司名字大全 鹏字开头公司起名 叶罗丽娃娃玩具店在哪 一道数据结构,完全二叉树的题目,求助! 高分求数据结构 二叉树问题(再线等) 数据结构题:树中所有结点的度等于所有结点数加() A.0 B.1 C.-1 D.2该选哪一个? 数据结构 二叉树问题 (高手来啊,跪求答案。。) 数据结构关于遍历二叉树的一道题目 急急急 在线等啊 数据结构简答题:画出下图中二叉树转化而成的森林,并写出改森林的线序遍历序列【在线求答案】 一道数据结构 二叉树的题目,求助! 数据结构 树与二叉树题目 求解 数据结构:二叉树判定题,求大神指点,谢谢!!! 一道简单的关于二叉树的数据结构填空题。。 数据结构二叉树选择题 数据结构二叉树题,如图 计算机,数据结构,c语言。求15题的二叉树图像和正确答案 数据结构中的二叉树题目,求大神帮忙做下,谢谢! [数据结构]二叉树题 给即将出生的伍姓儿子取名 社会工作者职业资格证书报考条件有哪些 有一首英文歌,我只记得一歌词。For the summer.求歌名,求歌词。 有一首韩文歌名里面有有summer的叫什么名字 有首歌叫什么summer是黑人蓝调歌手唱的? 数据结构,,平衡二叉树题,大家看看我做的对不对 Exception in thread &quot;main&quot; java.util.EmptyStackException 怎么解决啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 苹果手机怎么内存升级 我有两个,其中一个注册了健康码,另一个如何注册? 粤康码可以用两个打卡吗 健康通行码一个能上多个吗? 健康码在一个微信上解邦可以在另一个上邦吗? 申请健康码同一个能申请两个号码吗? 换了,手机号,怎么重新登录微信健康码? 今天突然微信里一个小程序推广把我加入了一个企业让给她做任务给你发那支付宝收款码,直接到账12? 企业微信怎么自动加入了 为什么加了一个企业,我的就被*加人被加进群以及加企业微信的功能了? 如何设置电脑自动休眠后再自动换醒 左边是绞丝旁 右边是妥 读什么 绥去掉绞丝旁是什么字 纲字为什么是绞丝旁? 全国高级中学教师资格证书的翻译是:什么意思 教师资格证哪里可以翻译? 金庸群侠传x主角宅怎么用 急!!!有英语达人帮忙翻译一下资格证书么?谢绝翻译软件