需要C语言二叉树的详细实现代码+解释。

如题所述

//数据结构 å®žçŽ°é™æ€äºŒå‰æ ‘三种遍历方式 è¿™æ˜¯æˆ‘写的 ä¸æ‡‚追问
# include <stdio.h>
# include <malloc.h>
typedef struct tree 
{
char data;
struct tree * l;
struct tree * r;
}tr,* ptr;
ptr init(void)
{
ptr a = (ptr)malloc(sizeof(tree));
ptr b = (ptr)malloc(sizeof(tree));
ptr c = (ptr)malloc(sizeof(tree));
ptr d = (ptr)malloc(sizeof(tree));
ptr e = (ptr)malloc(sizeof(tree));
a->data='A';
b->data='B';
c->data='C';
d->data='D';
e->data='E';
a->l = b;
a->r = c;
b->l = b->r = NULL;
c->r = d->l = NULL;
c->l = d;
d->r = e;
e->l = e->r = NULL;
return a;
}
void fir(ptr s)
{
if(s != NULL)
{
printf("%c\t",s->data);
if(s->l != NULL)
fir(s->l);
if(s->r != NULL)
fir(s->r);
}
}
void mid(ptr s)
{
if(s != NULL)
{
if(s->l != NULL)
mid(s->l);
printf("%c\t",s->data);
if(s->r != NULL)
mid(s->r);
}
}
void las(ptr s)
{
if(s != NULL)
{
if(s->l != NULL)
las(s->l);
if(s->r != NULL)
las(s->r);
printf("%c\t",s->data);
}
}
int main(void)
{
ptr t = init();
fir(t);
printf("\n");
mid(t);
printf("\n");
las(t);
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-02-14
建立树节点结构体,包含左右孩子,和节点值,建立树头,然后分别初始化左右孩子,依次循环,二叉树就建立了
第2个回答  2014-02-14
计算机专业的?建议还是好好看看书自己写吧。真心建议,别坑自己。
看书不懂的话,百度“严蔚敏”的数据结构视频,讲的很清楚。

请问C语言如何创建二叉树???
tree.root = NULL;\/\/创建一个空树 int n;scanf("%d",&n);for (int i = 0; i < n; i++)\/\/输入n个数并创建这个树 { int temp;scanf("%d",&temp);insert(&tree, temp);} inorder(tree.root);\/\/中序遍历 getchar();getchar();return 0;} ...

c语言二叉树问题,勿写代码,求详细思考过程
中序遍历:若树不空,则先访问左子树,再访问根,再访问右子树。从后序遍历:CDABE得出E是最顶根节点。然后中序遍历:CADEB得出CAD是E的左子树中的,B是E的右子树中的。再分析后序遍历CDA可以知道A是CD的根,而中序是CAD得到C是A的左子树,D是A的右子树。(如下图)最后,先序遍历:若树不...

数据结构中关于用c++语言建立二叉树的问题,求代码,急!!!
void preOrder(BiTree root)\/*先序遍历二叉树, root为指向二叉树根结点的指针*\/ { if (root!=NULL){ printf("%c",root->data); \/*输出结点*\/ preOrder(root ->LChild);\/*先序遍历左子树*\/ preOrder(root ->RChild); \/*先序遍历右子树*\/ } } void inOrder(BiTree root){ i...

C语言 什么叫完全二叉树?
完全二叉树是一种特殊的二叉树。定义:如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。例:特点:叶子结点只可能在最大的两层上出现,对任意结点,若其右分支下的子孙最大层次为L,则其左分支下的子孙的最大...

用C语言实现二叉排序树排序,并按递减顺序打印各个数据
InsertBST(bt,A[i]); \/\/将关键字A[i]插入二叉排序树T中 i++;} return bt; \/\/返回建立的二叉排序树的根指针 } void DispInDescrease(BSTNode *bt){ \/\/按从小到大输出查找树中的内容,对该树中序遍历即可 if(bt){ DispInDescrease(bt->lchild);printf("%d\\t",bt->key);Dis...

一道数据结构关于二叉树的问题,求写出C语言代码
\/\/先序遍历二叉树 void PreOrderTraverse(BiTree T){ if(T){ printf("%c",T->data);PreOrderTraverse(T->lchild);PreOrderTraverse(T->rchild);} } \/\/中序遍历 void InOrderTraverse(BiTree T){ if(T){ PreOrderTraverse(T->lchild);printf("%c",T->data);PreOrderTraverse(T->...

c语言 关于二叉树的创建和遍历(中序遍历)
void inorder(BiTNode *BT){\/\/中序遍历二叉树——递归形式 if(BT!=NULL){ inorder(BT->lchild );printf("%c ",BT->data);inorder(BT->rchild );} } void main(){ BiTNode *BT;printf("以广义表形式表示输入的二叉数 (如A(B(C,D),E(,F))的形式)\\n\\n");char string[Number]...

求二叉树高度的原理、算法是什么,越详细越好,C语言,谢谢
首先分析二叉树的深度(高度)和它的左、右子树深度之间的关系。从二叉树深度的定义可知,二叉树的深度应为其左、右子树深度的最大值加1。由此,需先分别求得左、右子树的深度,算法中“访问结点”的操作为:求得左、右子树深度的最大值,然后加 1 。int Depth (BiTree T ){ \/\/ 返回二叉树的...

判断完全二叉树用C语言编写
1 初始化空表、空队;2 输入结点数、指定根结点,输入边到表中;3 根结点进队;4 将队首出队到p;5 若表为空,返回1(真)。不空则在表中查找第一项等于p的边i。若找到,将边i的第二项进队,从表中删除边i。若没有找到,则返回0(假)。6 若表为空,返回1(真)。不空则在表中...

数据结构中用c语言建立二叉树的程序
typedef struct Bnode \/\/二叉树节点类型 { int m;struct Bnode *Lchild,*Rchild;}Btnode, *BTptr;typedef struct Dnode \/\/队列节点类型 { Btnode *pr;struct Dnode *next;}Qnode,*Qlink;typedef struct \/\/q节点类型 { Qnode *front,*rear;}linkqueue;void Lcreatqueue(linkqueue *...

相似回答