树与二叉树的基本概念

一,树的概念及结构

1. 树是一种非线性的数据结构,是由许多节点组成的一个具有层次关系的集合。任何一棵树都是由 [根 + N颗子树(N>=0)] 但把它称为树是因为它的像一颗倒挂的树,根在上,枝叶朝下

2. 树的一些基本概念(根据树的结构与人类的亲缘关系命名)

节点的度:一个节点含有的子树的个数称为该节点的度; 例如:节点1的度是2

叶节点或终端节点:度为0的节点称为叶节点; 没有子节点的节点

非终端节点或分支节点:度不为0的节点;

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;

兄弟节点:具有相同父节点的节点互称为兄弟节点;  例如; 8,9节点是兄弟节点,而9,10不是;

树的度:一棵树中,最大的节点的度称为树的度(不论层数);

节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推(也可以从第0层开始,但这种命名不常用);

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

堂兄弟节点:双亲在同一层的节点互为掌兄弟;

节点的祖先:从根到该节点所经分支上的所有节点;

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。

森林:由m(m>0)棵互不相交的树的集合称为森林(多棵树);

3. 一些特殊的树

关于树的层数从0开始还是从1开始:
数组:

   数组名是首元素地址, a[ i ] == *(a + i), 所以数组首元素的位置从0开始

树:

   当该树为空树时(即只有一个空节点)若定义第一层为1时,则空节点为0;而若定义第一层为0时,那么空节点就是-1层,所以实际应用上更常用把第一层定义为1的情况。

4. 树与非树

1. 子树是不相交的;

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

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

5. 如何表达,定义树(C语言中)

1. 树的度已知

2. 树的度未知,在结构体当中放一个顺序表存储节点

3. 左孩子,右兄弟表示法

无论一个父节点有多少个孩子,child指针只指向左边开始的第一个孩子

下图黑色是child指针, 红色的是brother指针

2. 二叉树的概念及结构

1.概念

  二叉树是一种树形数据结构,每个节点最多只有两个子树,这两个子树分别被称为左子树与右子树。二叉树的节点可以没有子树,也可以只有左子树或右子树,还可以是空树。

满二叉树(是一种特殊的完全二叉树)

每个节点都有两个子节点

一个只有资深程序员才懂的图 (T A T)

完全二叉树

假设高度为h,前h - 1层都是满的,最后一层不满,且最后一层从左到右必须连续

下图就不是一个完全二叉树

下图才是一个完全二叉树

2. 二叉树的存储

a. 完全二叉树的存储(数组结构)

用下标表示父子关系

假设父亲在数组中的下标是 i,那么

左孩子在数组中的下标是2 * i + 1,

右孩子在数组中的下标是2 * i - 1 

假设孩子在数组中的下标是 j

父亲在数组中的下标:(j - 1)/ 2 , 不用考虑两个孩子下标的不同。

完全二叉树也可以用数组存储,但不适合,因为有很多的空间浪费

b. 非完全二叉树的存储(链式结构)

空的地方传空指针

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值