关于二叉树创建时遇到的问题的解决
来源:互联网 发布:php调用服务器exe程序 编辑:程序博客网 时间:2024/05/29 16:19
之前在创建二叉树时,遇到了一些问题,因为这个忽视的问题而导致在写计算二叉树的叶子数时出现死循环,今天在老师的帮助下找到了问题所在:
之前的创建二叉树的代码为:
int CreateBiTree(BiTree *T){ char ch; printf("\n\t\t\t\t\t ch:"); fflush(stdin); scanf("%c",&ch); if(ch == 'Z') { T = NULL; } else { if(!(*T = (BiTNode *)malloc(sizeof(BiTNode)))) { exit(OVERFLOW); } printf("\t\t\t\t\t(*T)->data = ch:"); (*T)->data = ch; //生成根节点 printf(" lchild:"); CreateBiTree(&(*T)->lchild); //生成左子树 printf("\t\t\t\t\t rchild:"); CreateBiTree(&(*T)->rchild); //生成右子树 } return OK;}//创建二叉树计算叶子结点的代码为:
int CountBiTreeLeaf(BiTree T){ if(T == NULL) { printf("\nT == NULL"); return 0; } else if((T->lchild == NULL) && (T->rchild == NULL)) { printf("\nT->lchild == NULL || T->rchild == NULL"); printf("\nT->data=%c",T->data); return 1; } else { printf("\nCountBiTreeLeaf(T->lchild) + CountBiTreeLeaf(T->rchild)="); return CountBiTreeLeaf(T->lchild) + CountBiTreeLeaf(T->rchild); }}//统计叶子结点的个数
运行时就会出现死循环
通过死循环的部分可以看出,在判断时是不能进入结点为空的语句中的,于是从树的构建中寻找问题,最终发现这一条语句存在着问题:
if(ch == 'Z') { T = NULL; }
这里给T赋值为空,也就是给整个结构体地址赋值为空,但是我们的目的是给该结构体中的内容,即左孩子的地址指向的内容赋为空,所以正确代码应为:
if(ch == 'Z') { *T = NULL; }这也是为什么在后面一直不能进入判空的语句的原因,修改后的程序运行起来是这样的:
总结:对指针的使用还是不能把握,需要多多理解。
阅读全文
0 0
- 关于二叉树创建时遇到的问题的解决
- 面试过程遇到关于二叉树的问题
- 数据结构 二叉树的创建 关于二级指针的问题
- 【redis】关于集群创建遇到的问题
- 【redis】关于集群创建遇到的问题
- 关于mysql创建约束时遇到的问题。
- 关于二叉树的创建、遍历等问题
- 关于创建一个输入端和两个输出端遇到问题的解决
- 二叉树创建时的一个问题
- 二叉树中遇到的问题
- C语言创建二叉树过程中遇到的一些问题
- 解决Tomcat创建虚拟目录遇到的所有问题。
- 解决:关于 SHFILEOPSTRUCT 的使用遇到的问题
- 解决:关于 SHFILEOPSTRUCT 的使用遇到的问题 之二
- 关于本地通遇到的问题及解决的方法
- 二叉树的创建的内存问题
- 关于在创建JFrame中遇到的问题及解决办法
- 关于vs2012创建cocos2d-x中控件遇到的问题
- 前后端分离开发背景下,前端如何使用nginx代理转发ajax跨域访问后台服务?
- HTTP Status 500
- 漏洞真实影响分析,终结网络安全的“狼来了”困境
- Activiti实现流程定义的控制与修改
- 如何判断一个String字符串不为空
- 关于二叉树创建时遇到的问题的解决
- 初学者---Android 接口回调
- Apsara Clouder大数据专项技能认证:共享单车骑行分析
- gradle 区分debug和realse自动化打包
- 服务器返回状态码
- Ubuntu14.0.4 配置ftp服务器
- jsp页面老提示Multiple annotations found at this line:
- 蓝桥杯-关联矩阵
- [javase]单例模式 饿汉式