二叉树实例

本文探讨了二叉树的存储结构及其遍历方法,包括头文件BinTree.h、实现文件BinTree.c以及主程序main.c。通过示例详细阐述了二叉树的层次遍历过程。
摘要由CSDN通过智能技术生成

二叉树:

二叉树性质:
    1.第i层的节点总数最多有2i-1个结点
    2.深度额我k的二叉树最多有2k-1个结点,最少有k个结点
    3.二叉树,如果其叶结点为n0,而度为2的结点总数为n2,则n0=n2+1
    4.有n个结点的完全二叉树的深度k为:k=[log2n]+1
    5.有n个结点的完全二叉树各结点如果用顺序表存储,对任意结点i,有如下关系:
        如果 i != 1,则其父节点的编号为i/2
        如果 2*i <= n,则其左子树根节点的编号为2*i;若 2*i>n,则无左子树
        如果 2*i+1 <= n,则右子树根节点的编号为2*i+1;若 2*i+1>n,则无右子树

二叉树的存储:

    1.顺序存储结构:若是完全二叉树,则某个结点的父节点=(该节点的位置/2),其子节点为(该节点的位置*2)和(该节点的位置*2+1),从1开始计算;
                    若不是完全二叉树,可以在没有结点数据的位置置为空,模拟成完全二叉树(然后同上);

这里写图片描述

            如图二叉树,如果使用顺序存储结则数据结构定义为如下sqTree数组:
                #definde MAXSIZE 100
                typedef int DATA;
                typedef DATA SeqBinTree[MAXSIZE];
                SeqBinTree sqTree;       //顺序存储结构
            对于上面的完全二叉树,最终使用顺序存储结构后,得到的效果为如下图:

这里写图片描述

            通过图中规律可发现:
                1.求某个结点的子结点,只需把该结点在数组中的位置(非下标,而是下标+1)乘2,则子节点为所得的位置的结点以及其下一个结点;
                2.求某个结点的父结点,只需把该结点在数组中的位置除以2,说的的商即为父结点位置;
                3.对于非完全二叉树,可以模拟为完全二叉树使用,即把没有结点的位置“空出来”,表示没有结点,如图,假设I节点不存在,则9的位置即为空

            顺序存储结构问题:占用内存连续且必须提前分配足够的内存,不能扩容,不够灵活,所以一般使用链式存储结构存储树;

这里写图片描述

    2.二叉链式存储结构:数据结构定义包括一个数据,一个指向左子树的指针,一个指向右子树的指针(没有则赋值为空);

        对于链式存储结构,可以使用树的基本原理,即树相当于多个子树嵌套,树中包含多个子树,
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值