对于空结点的详解

在开始学习堆栈和队列的时候,若是用链表来存储。那么在最开始创建(以堆栈为例)的时

候,老师会说先建立一个空结点,在这个空结点的基础上进行插入删除的操作(理由是这样会方便

点),本人当时愚见是进行插入时就不用判断头指针是否为空或者删除时不用让尾指针指向

NULL。直到现在创建树这块没有用空结点出问题才理解了       老师所谓的方便:
 

先看堆栈的结构定义:

这是部分函数:

我们先建立一个空结点,让堆栈Stack指向这个空结点。压栈函数将所需要压入的元素压入堆栈。

当我用差不多的思想应用于二叉搜索树的插入时(没有建立空结点,直接以树根代表该树)

 这是main()函数中的具体操作:

 

 出问题了,当本人尝试打印该树时,发现什么都没有。说明构建过程出了问题。

就是因为一开始没有设立空结点,让树根直接为NULL这块出了问题,回到Insert函数。我们传进去

的是空树,在函数内部让其指向新的地址是无效的。因为c语言是函数参数传值。这就相当于在函

数内部复制了一个空树,对复制的空树做一系列的操作。但是原来的树并没有改变。为解决该问

题。有3种方法:

1. 让原来的空树接收函数的返回值,即for循环最后一行改为    BST = Insert(c,BST);

2. 函数参数传值时传BST的指针;

3. BST一开始指向一个空结点,然后就可以完成。

因为如果树有了指向的结点,即不空,那么我们就不需要在函数内部改变树的指向,那么就可以根

据空结点为基础,对该树进行操作。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值