二叉树(一):树的基本概念

基本概念:

是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

树的逻辑结构:

任何一颗树,都可以分成根和n棵子树

树与非树:

  1. 子树是不相交的

  1. 除了根节点外,每个节点有且仅有一个父节点

  1. 一颗有N个节点的树有N-1条边

名词概念:

节点的度:

一个节点含有子树的个数,如上图,A的度为3

叶节点火终端节点:

度为零的节点。如上图中的J K L

分支节点或非终端节点:

度不为零的节点.上图中除了J K L以外的节点

父节点或双亲节点

若一个节点含有子节点,那么这个节点成为子节点的父节点。如上图,A是B C D的父节点

子节点或孩子节点

一个节点含有的子树的根节点称为该节点的子节点。如上图,B C D的父节点都为A

兄弟节点

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

如上图,B C D互为兄弟节点

树的度

一棵树中,最大的节点的度称为树的度。上图中树的度为3

节点的层次

从根开始定义,根是第一层,根的子节点为第二层….

也有可能从0开始计数,根为第零层。

树的高度or深度

树中节点的最大层次

当节点的层次从0开始定义时,空树的深度为-1

当结点的层次从1开始定义时,空树的深度为0

堂兄弟节点

父节点在同一层上互为堂兄弟节点

节点的祖先

从根节点到当前节点所经过的所有的分支节点。

子孙

以某节点为根的子树中的任意一个节点都是该节点的子节点

森林

n棵互不相交的树为森林

树的表示:

1.定义节点?

struct TreeNode
{
    int data;
    struct TreeNode* child1;
    struct TreeNode* child2;
    struct TreeNode* child3;
    struct TreeNode* child4;
    //...
};

本方法错误的地方:

  1. 如果知道树的度,但可能存在很多指针浪费

  1. 不知道树的度就无法处理

2.孩子兄弟表示法

struct TreeNode
{
    int data;
    struct TreeNode* child;
    struct TreeNode* brother;
};

每个节点只表示其的第一个子节点,然后通过结构体中的brother指针来指向该节点的其他子节点

树的应用:

  1. linux的系统为一棵树

  1. windows的文件系统是森林

特殊的树:

二叉树:

二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。

满二叉树:

一个二叉树,如果每一个层的节点数都达到最大值,则这个二叉树就是满二叉树。而就是说,如果一个二叉树的层数为h,则节点总数为(利用等比公式or错位相减法来计算)。则它就是满二叉树。

层数:

节点个数计算:

从上到下依次为:1,2,4,8,16,32 ....等比公式计算

完全二叉树:

完全二叉树是效率很高的数据结构,完全二叉树是满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个节点都与深度为K的满二叉树中编号从1到n的节点,此时称为完全二叉树,而满二叉树是一种特殊的完全二叉树(前N-1层是满的,最后一层可以不满,但从左向右必须连续

节点个数:

假设完全二叉树的高度为h

节点个数范围:

二叉树的一些结论:
  1. 度为0的节点为,度为2的节点为, 那么

每增加一个度为2的节点,就会增加一个度为0的,初始时,度为0的节点比度为2的节点多一个.

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值