《C语言程序开发范例宝典》-2015版,实例101,二叉树的递归创建
发表在C语言图书答疑 2017-08-29 悬赏:1 学分 《C语言从入门到精通(第3版)》第3章 数据类型
是否精华
版块置顶:

实例101二叉树递归创建.png

如图,程序都看懂了,没问题,就是不明白创建二叉树的时候CreateTree(),怎么输入是这个样子?请老师解答,谢谢!

如果可以帮忙画下这个二叉树,看着书上的图3.38,越看越懵。。




bitree CreatTree()/*创建二叉链表*/

{

char a;

bitree newnode;

scanf("%c",&a);

if(a=='#')

return NULL;

else

{

newnode=(bitree)malloc(sizeof(bitnode));

newnode->data=a;

newnode->lchild=CreatTree();/*递归创建左子树*/

newnode->rchild=CreatTree();/*递归创建右子树*/

}

return newnode;

}



2017-08-29 22:05:19编辑
分享到:
精彩评论 2
大米粥
学分:1330 LV8
TA的每日心情
伤心
2017-05-02 10:51:31
2017-09-01
沙发

我在《C语言从入门到精通(第3版)》中没有找到你说的实例,能否具体指出此实例的实例号和章节号,或者将完整的代码附上。

zer0_1499414293
学分:77 LV3
2017-09-07
板凳

实例101二叉树的递归创建.png

对应的C文件:

二叉树递归创建.txt

#include<stdlib.h>

#include<stdio.h>

typedef struct node/*二叉链表结构声明*/

{

struct node *lchild;

char data;

struct node *rchild;

}bitnode,*bitree;/*bitnode、bitree为该结构体类型*/

bitree CreatTree()/*创建二叉链表*/

{

char a;

bitree newnode;

scanf("%c",&a);

if(a=='#')

return NULL;

else

{

newnode=(bitree)malloc(sizeof(bitnode));

newnode->data=a;

newnode->lchild=CreatTree();/*递归创建左子树*/

newnode->rchild=CreatTree();/*递归创建右子树*/

}

return newnode;

}

int btreedepth(bitree bt)/*自定义函数btreedepth()求二叉树的深度*/

{

int ldepth,rdepth;

if(bt==NULL)

return 0;

else

{

ldepth=btreedepth(bt->lchild);

rdepth=btreedepth(bt->rchild);

return (ldepth>rdepth?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==NULL&&bt->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);

}

}

int 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));/*调用函数输出树中叶子结点个数*/

while(1);

}

谢谢,感觉二叉树创建不太明白输入为什么是这样子?

二叉树创建输入.png


首页上一页 1 下一页尾页 2 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照