二叉链表的函数库c语言 链表 二叉树

用c语言写二叉树 , 源代码 。二叉树是采用递归定义二叉链表的函数库c语言的二叉链表的函数库c语言 , 实现起来代码简洁(也许并不简单) 。并且它在具体二叉链表的函数库c语言的计算机科学中有很重要的运用二叉链表的函数库c语言,是一种很重要的数据结构二叉链表的函数库c语言,二叉树有三种遍历和建立的方式 。今天先学习一下它的建立和打印 。
以下代码在Win-Tc1.9.1下编译通过 。
#include stdio.h
#define ElemType char
//节点声明,数据域、左孩子指针、右孩子指针
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//先序建立二叉树
BiTree CreateBiTree(){
char ch;
BiTree T;
scanf("%c",ch);
if(ch=='#')T=NULL;
else{
T = (BiTree)malloc(sizeof(BiTNode));
T-data = https://www.04ip.com/post/ch;
T-lchild = CreateBiTree();
T-rchild = CreateBiTree();
}
return T;//返回根节点
}
//先序遍历二叉树
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-rchild);
}
}
//后序遍历
void PostOrderTraverse(BiTree T){
if(T){
PreOrderTraverse(T-lchild);
PreOrderTraverse(T-rchild);
printf("%c",T-data);
}
}
void main(){
BiTree T;
T = CreateBiTree();//建立
PreOrderTraverse(T);//输出
getch();
}
求助:c语言建立二叉链表问题出在参数传递上,在主函数中你将root传递到函数CreateBiTree中,形参bt等于root的值,在CreateBiTree中你给bt申请了空间,但是这只是将你申请的空间的指针赋给了形参,主函数中的root的值并没有改变 。函数CreateBiTree执行完后 , 指向树根结点的指针bt被释放(注意不是bt所指的空间被释放) , 此时主函数中的root根本没有任何变化 。这个程序还有另外一个更重要的问题,即内存泄漏,虽然建立树没有成功,但是在函数CreateBiTree中给树结点申请的空间并没有被释放 , 这部分空间也没有任何指针去指向 , 成了一块无法被其它程序占用 , 却也无法释放的空间 。这个错误是初学指针的人经常犯的错误 。改成这样即可:
BiTree CreateBiTree()
{
char ch;
BiTree bt=NULL;
ch=getchar();
if(ch=='.') bt=NULL;
else
{
bt=(BiTree)malloc(sizeof(BiTNode));
bt-data=https://www.04ip.com/post/ch;
bt-LChild = CreateBiTree();
bt-RChild = CreateBiTree();
}
return bt;
}
void main()
{
BiTree root;
root = CreateBiTree();
}
C语言:建立二叉树,在main方法里写代码调试?#includestdlib.h
typedef struct node/*二叉链表结构声明*/
{
struct node *lchild;
char data;
struct node *rchild;
}bitnode,*bitree;/*bitnode、bitree为该结构体类型*/
bitree CreatTree()/*创建二叉链表*/
{
char a;
bitree new;
scanf("%c",a);
if(a=='#')
return NULL;
else
{
new=(bitree)malloc(sizeof(bitnode));
new-data=https://www.04ip.com/post/a;
new-lchild=CreatTree();/*递归创建左子树*/
new-rchild=CreatTree();/*递归创建右子树*/
}
return new;
}
int btreedepth(bitree bt)/*自定义函数btreedepth()求二叉树的深度*/
{
int ldepth,rdepth;
if(bt==NULL)
return 0;
else
{
ldepth=btreedepth(bt-lchild);
rdepth=btreedepth(bt-rchild);
return (ldepthrdepth?ldepth 1:rdepth 1);
}
}
int ncount(bitree bt)/*自定义函数ncount求结点的个数*/
{
if(bt==NULL)
return 0;
else return(ncount(bt-lchild) ncount(bt-rchild) 1);
}
int lcount(bitree bt)/*自定义函数lcount求叶子结点的个数*/
{
if(bt==NULL)
return 0;
else if(bt-lchild==NULLbt-rchild==NULL)
return 1;
else return(lcount(bt-lchild) lcount(bt-rchild));
}
void print(bitree bt)/*自定义函数print用中序遍历的方式输出二叉树结点内容*/
{
if(bt!=NULL)
{
print(bt-lchild);
printf("%c",bt-data);
print(bt-rchild);
}
}
void main()
{
bitree root;
root=CreatTree();/*调用函数创建二叉链表*/
printf("contents of binary tree:\n");
print(root);/*调用函数输出结点内容*/
printf("\ndepth of binary tree:%d\n",btreedepth(root));/*调用函数输出树的深度*/
printf("the number of the nodes:%d\n",ncount(root));/*调用函数输出树中结点个数*/
printf("the number of the leaf nodes:%d\n",lcount(root));/*调用函数输出树中叶子结点个数*/
}
C语言二叉树的二叉链表#include stdio.h
#include stdlib.h
#includemalloc.h
typedef struct node
{
char data;
struct node *lchild;
struct node *rchild;
}tnode;
tnode *createtree()
{
tnode *t;
char ch;
ch=getchar();
if(ch=='0')
t=NULL;
else
{
t=(tnode *)malloc(sizeof(tnode));
t-data=https://www.04ip.com/post/ch;
t-lchild=createtree();
t-rchild=createtree();
}
return t;
}
void listtree(tnode *t)
{
if (t!=NULL)
{
printf("%c",t-data);
if(t-lchild!=NULL||t-rchild!=NULL)
{
printf("(");
listtree(t-lchild);
if(t-rchild!=NULL)
printf(",");
listtree(t-rchild);
printf(")");
}
}
}
void inorder(tnode *t)
【二叉链表的函数库c语言 链表 二叉树】{
if(t!=NULL)
{
inorder(t-lchild);
printf("%c\t",t-data);
inorder(t-rchild);
}
}
void leve(tnode *t)
{
tnode *quee[100];
int front,rear;
front=-1;
rear=0;
quee[rear]=t;
while(front!=rear)
{
front;
printf("%c\t",quee[front]-data);
if(quee[front]-lchild!=NULL)
{
rear;
quee[rear]=quee[front]-lchild;
}
if(quee[front]-rchild!=NULL)
{
rear;
quee[rear]=quee[front]-rchild;
}
}
}
main()
{
tnode *t=NULL;
printf("请输入二叉树元素:");
t=createtree();
printf("广义表的输出:");
listtree(t);
printf("\n");
printf("二叉树的中序遍历:");
inorder(t);
printf("\n");
printf("二叉树的层次遍历:");
leve(t);
printf("\n");
system("pause");
}
/*
输入:AB00CD00E00F000
输出:A(B,C((D,E))
中序遍历: B A D C E
层次遍历:A B C D E
*/
二叉链表的函数库c语言的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于链表 二叉树、二叉链表的函数库c语言的信息别忘了在本站进行查找喔 。

    推荐阅读