数据结构 树的基本结构与概念

目录

概要

1.树的概念

1.1树

1.2树的相关概念

1.3树的结构表示

1.4树在实际中的运用(表示文件系统的目录树结构)

2.二叉树的概念及结构

2.1概念

2.1.1如何判断是否为二叉树

2.1.2二叉树的要求

2.2特殊的二叉树

2.2.1满二叉树

2.2.2完全二叉树

2.3二叉树的性质

小结


概要

本章主要是简单介绍一下树的基本概念,以及稍微讲讲二叉树的基本概念。

1.树的概念

1.1树

树是一种非线性的数据结构,它是由n(n>=0)个节点组成一个具有层次关系的集合,把他叫做树,是因为它像一颗倒挂的树,也就是根朝上,叶朝下的样子。

一、树有一个特殊的节点,称为根节点,根节点没有前驱节点,意思就是根节点是最上面的节点。

二、除根节点外,其余节点被分成M个互不相交的集合,可以理解为左边又一棵树,右边又有一颗树,每一个集合都是一棵结构与树类似的子树。每棵子树的根节点有且只有一个前驱节点,可以有0个或多个后继节点。

三、树是递归定义的。

注:树不能有交集,否则不是树结构,如图:

1.2树的相关概念

节点的度        一个节点含有的节点个数称为度。

叶子节点        度为0的节点称为叶子节点

分支节点        度不为0的节点。

双亲节点
或父节点
        一个节点含有子节点,这个节点称为其子节点的父节点。

子节点            一个节点是该节点的根节点的叶子节点称为子节点

兄弟节点        具有相同的父节点称为兄弟节点

树的度            一颗树中最大的节点的度,称为树的度

节点的层次     从根开始,根为第一层,子节点为第二层

树的高度
或深度
            树的节点最大层次

节点的祖先     分支节点以上的都是祖先节点

本章树的概念居多,所以相对其他的章节来说会枯燥很多,但是这些基础概念也是必须掌握的,后面会给大家介绍有关树有趣的知识的。

1.3树的结构表示

兄弟表示法(了解)

typedef int DataType;
struct Node
{
    struct Node* _firstChild1; // 第一个孩子结点
    struct Node* _pNextBrother; // 指向其下一个兄弟结点
    DataType _data; // 结点中的数据域
};

1.4树在实际中的运用(表示文件系统的目录树结构)

2.二叉树的概念及结构

2.1概念

2.1.1如何判断是否为二叉树

        1.树为空

        2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

2.1.2二叉树的要求

        1.不存在度大于2的节点

        2.二叉树的子树有左右之分,次序不能颠倒,二叉树是有序树。

2.2特殊的二叉树

2.2.1满二叉树

        二叉树中每一层的节点数都达到最大值
        设层数为k,节点总数为 (2^k) - 1

2.2.2完全二叉树

        完全二叉树是由满二叉树衍生出的,对最深层k的,前k-1层都是满的,但第k层不一定满,要求也是从左到右必须连续。

2.3二叉树的性质

1.一棵非空二叉树的第 i 层上最多由2^(i-1)个节点
2.深度为 h 的二叉树最大节点数是 2^h - 1 个节点
3.如果度为 0 叶节点个数为 n0个,度为 2 的分支节点个数为 n2 个,那么 n0 = n2 + 1
4.具有n个节点的满二叉树的深度为:h = log2(n+1)
5.当得知子节点求父节点 (i - 1)/ 2
    i = 0 时,i为根节点,无双亲
   父节点求左、右孩子节点
   左:2 i + 1 右:2 i + 2 (要求范围都是 < n,当数范围 > n说明该节点不存在)

小结

        本章树重要的基本概念大致讲完,二叉树重点内容我会在下一章会跟大家详细详谈,像前中后序遍历、求节点个数、层数等也会跟大家一起讨论讨论的,期待下一期吧。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值