一起talk C栗子吧(第三十九回:C语言实例--创建一棵二叉树)


各位看官们,大家好,上一回中咱们说的是“你了解scanf吗”的例子,这一回咱们说的例子是:创建一棵二叉树。闲话休提,言归正转。让我们一起talk C栗子吧!

看官们,二叉树是一种特殊的树,特殊性就在于它的每个结点最多有两个孩子。二叉树在程序中也是一种经常使用的数据结构,比如在排序中也会使用它。


在我们的例子中,使用了一种叫作二叉链表的存储结构来存储二叉树。二叉链表其实是一个结构体类型的存储空间,它包含三个成员。具体的定义的如下:

typedef struct _BinTreeNode
 {
    char data;                // the value of node
    struct _BinTreeNode *lc;  // the left child
    struct _BinTreeNode *rc;  // the right child
}Node;

从结点的定义中,我们可以看到:

  1. 第一个成员用来存储结点的值;
  2. 第二个成员用来存储结点的左孩子;
  3. 第三个成员用来存储结点的右孩子。

最后的这两个成员一左一右,很像一个“八”字的叉,而且它们可以把其它的结点链接在一起,因此叫它二叉链表很形象。说完二叉链表后,我们接下来说一说如何使用二叉链表创建一棵二叉树,详细的步骤如下:

  1. 从终端或者文件中读取结点的值;
  2. 判断获取的值,如果值是‘X’,那么表示二叉树中没有结点,返回步骤1.如果不是‘X’,进入步骤3;
  3. 给结点分配存储空间,并且把步骤1中读取的值当作该结点的值;
  4. 执行步骤1到步骤3,创建该结点的左孩子(这个过程可以通过递归实现);
  5. 执行步骤1到步骤4,创建该结点的右孩子(这个过程可以通过递归实现);
  6. 反复执行步骤1到5,直到终端中读取的内容都是‘X’,或者文件中的内容为空。

看官们,正文中就不写代码了,详细的代码放到了我的资源中,大家可以点击这里下载使用。

我们在例子中创建的二叉树如下图所示:
二叉树的图形

例子中,我们使用了一个数组来存放二叉树中各个结点的值,其中X表示结点的值为空,或者说该结点不存在。大家可以自己修改数组中的值,来创建不同的二叉树。我们在例子中创建结点时给每个结点分配了相应的存储空间,大家都知道,分配完的空间需要释放掉,不然会有内存泄漏。因此,我们专门定义了一个函数:DeatroyBinaryTree来释放存储空间。


各位看官,关于创建一棵二叉树的例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值