二叉树及C语言实现

本文讲解二叉树及其C语言的三种遍历实现

二叉树

二叉树是一种树型结构,其特点是每个结点至多有两颗子树,这两颗子树有左右之分,顺序不能颠倒。如图就是一个二叉树的例子:
在这里插入图片描述

  • 除最后一层外,其他层的结点均有2个结点的二叉树称为满二叉树
  • 对满二叉树按照从上到小,从左到右的顺序编号,如果有一个二叉树不是满二叉树,该树的编号又与满二叉树的编号对应,则称为完全二叉树

二叉树的性质

二叉树每个结点至多有两颗子树,因此如果二叉树的每个节点都都包含至多2个结点,则

  • i i i层上有 2 i − 1 2^{i-1} 2i1个结点( i ≥ 1 i\ge1 i1
  • 深度为k的二叉树有 2 k − 1 2^{k-1} 2k1个结点

任何一颗二叉树,如果其终端结点(没有子树的结点)数为 n e n_e ne,度为2的结点数为 n 2 n_2 n2,则

  • n e = n 2 + 1 n_e=n_2+1 ne=n2+1

具有n个结点的完全二叉树的深度为

  • ⌊ l o g 2 n + 1 ⌋ \lfloor log_2n +1\rfloor log2n+1

二叉树的遍历

二叉树的遍历按照访问顺序的不同有6种方式:

  • 根结点->左子树->右子树
  • 左子树->根结点->右子树
  • 左子树->右子树->根节点
  • 根结点->右子树->左子树
  • 右子树->根节点->左子树
  • 右子树->左子树->根节点

若我们规定访问顺序为先左后右,则根据访问根节点的顺序不同,有三种遍历方式:

  1. 先序遍历二叉树:
    1)访问根节点
    2)先序遍历左子树
    3)先序遍历右子树

  2. 中序遍历二叉树:
    1)中序遍历左子树
    2)访问根节点
    3)中序遍历右子树

  3. 后序遍历二叉树:
    1)后序遍历左子树
    2)后序遍历右子树
    3)访问根节点
    在这里插入图片描述

以上图中的表达式为 a + b ∗ ( c − d ) − e / f a+b*(c-d)-e/f a+b(cd)e/f,对于图中二叉树的遍历,
先序遍历的结果为:

- + a * b - c d / e f

中序遍历的结果为:

a + b * c - d - e / f

后序遍历的结果为:

a b c d - * + e f / -

二叉树遍历的C语言实现

以上提到的关于二叉树的遍历使用C语言进行了实现,具体代码见Github

代码运行效果如下:
在这里插入图片描述
才疏学浅,难免有错误和不当之处,欢迎交流批评指正!
同时有问题的话欢迎留言或邮箱联系(ljt_IT@163.com)。

创作不易,觉得写得不错就微信扫码奖励一下吧!

Reward

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值