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

数据结构 如何创建一棵树,请给出c语言详细代码,谢谢

发布网友 发布时间:2022-05-12 07:53

我来回答

2个回答

热心网友 时间:2022-04-23 05:33

刚刚回答了一个类似的问题,以下代码供参考:
#include "stdio.h"
#include "stdlib.h"
#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef char TElemType;
typedef int Status;
typedef struct BiTNode { // 结点结构
TElemType data;
struct BiTNode *lchild, *rchild;
// 左右孩子指针
} BiTNode, *BiTree;

//以下是建立二叉树存储结构,空节点输入作为#结束标识
Status CreateBiTree(BiTree &T) {
//请将该算法补充完整,参见第6章课件算法或课本
char ch;
scanf("%c",&ch);
if(ch=='#') T=NULL;
else{
if(!(T=(BiTNode*)malloc(sizeof(BiTNode))))
exit(OVERFLOW);
T->data=ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return OK;

} // CreateBiTree
void Preorder(BiTree T)
{
if(T)
{
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}

void Inorder(BiTree T)
{ // 中序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}
void Postorder(BiTree T)
{ // 后序遍历二叉树
//请将该算法补充完整,参见第6章课件算法
if(T)
{
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}

//以下是求叶子结点数
void CountLeaf(BiTree T,int& count){
//请将该算法补充完整,参见第6章课件算法
if(T){
if((!T->lchild)&&(!T->rchild))
count++;
CountLeaf(T->lchild,count);
CountLeaf(T->rchild,count);
}
}

//以下是求二叉树的深度
int Depth(BiTree T ){
//请将该算法补充完整,参见第6章课件算法
int depthval,depthLeft,depthRight;
if(!T) depthval=0;
else{
depthLeft = Depth(T->lchild);
depthRight = Depth(T->rchild);
if(depthLeft>depthRight)depthval = 1+depthLeft;
else depthval = 1+depthRight;
}
return depthval;
}

void main(){
BiTree T;
int s=0,d;
printf("\n creat of the bitree:\n");
CreateBiTree(T);
printf("\n output result of Preorder:\n");
Preorder(T);
CountLeaf(T,s);
d=Depth(T);
printf("\n leaves=%d\n",s);
printf("\n depth=%d\n",d);
}

热心网友 时间:2022-04-23 06:51

# include <stdio.h>
# include <stdlib.h
typedef struct BiTNode
{
char data;
struct BiTNode * lchild,* rchild;
}BiTNode, *BiTree;
//先序建立二叉树中的节点
BiTree CreatBiTree()
{
BiTree T;
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch == '0')
{
return NULL;
}
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));
if(!T)
exit(1);
T->data=ch;
T->lchild = CreatBiTree();
T->rchild = CreatBiTree();
return T;
}
}

void PreTravel(BiTree T)
{
if(T)
{
printf("%c ",T->data);
PreTravel(T->lchild);
PreTravel(T->rchild);
}
}

int main()
{
BiTree T;
printf("先序建立二叉树结点(‘0’表示空):\n");
T = CreatBiTree();
printf("先序遍历创建的二叉树:\n");
PreTravel(T);
printf("\n");
return 0;
}
/*
结果:
------------------------
先序建立二叉树结点(‘0’表示空):
a
b
0
0
c
0
0
先序遍历创建的二叉树:
a b c
Press any key to continue
------------------------------
*/
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
电脑音乐怎样保存到文件中怎样把歌曲放到文件夹里 电脑上如何把歌曲做成文件夹怎么把歌曲转化为文件 如何把音频加入到电脑文件夹上怎么把歌曲放到文件夹中 海参是不是吃多长时间以后可以不用在吃了 梦见一半黑色 电吉他买了音箱还要买效果器吗 有人去过资和信百货吗? 资和信百货企业理念 资和信百货家庭季家庭季简介 资和信是什么 磁铁的极性 一个c++的数据结构问题,二叉树中关于建立二叉树的代码,请大虾们帮忙写一下, 求数据结构算法平衡二叉树实现代码 磁铁极性是什么 数据结构中关于用c++语言建立二叉树的问题,求代码,急!!! 河间信誉楼外面的存储柜东西丢在里面了第二天还能取吗? 磁性,磁极和极性有何区别? 怎样分辨磁铁的极性 有没有只有一个极性的磁铁? 如何判断磁铁的极性 就是两块磁铁,非常靠近的时候,谁都挡不住黏在一起这是为啥呢? 磁极极性是什么意思? 数据结构上机实验编程:二叉树。要一套完整的代码程序!!!不要文字描述 数据结构二叉树C语言 共享存储柜每月需要多少流量 兼职靠谱大家有没有好的推荐吗? 我是19岁女生,想改一个时尚又有意义的网名。谢谢大家了! 我十九岁,性格:开朗活泼、霸道、任性,希望大家给我取个好听的网名谢谢 我单身十九了帮我起个好听点的单身网名,要吸引人的,谢谢 帮我想个十九岁男生低调网名 磁铁断后极性如何变化 c语言数据结构:怎么建立一个二叉树? 磁铁的极性怎样检测 磁石和磁铁,磁铁有极性,那磁石有极性吗? 电磁铁有极性吗?如何改变电磁铁的极性呢? 小磁铁可以拼出一个单向极性的磁铁球吗? 磁铁如何判断他的极性 异型磁铁如何判断磁极? 福特探险者加满92多少钱 红警3战术 求红警3各个国家的特点,缺点并附带最佳战术!!! 红色警戒3关于战术问题 红警三盟军战术 红色警戒3的战术、打法 红色警戒3战术 红警3:盟军、帝国、苏联各自战术搭配? pb12能直接开发web程序吗 红警3苏联在遭遇战中打法和战术! 我玩红警3老输,谁能告诉我一些技巧或者战术 胡氏方字辈怎么起名