树和二叉树

1.树概念及结构

1.1 概念:

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

  • 有一个特殊的结点,称为根结点,根节点没有前驱结点;
  • 除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1<= i<= m)又是一棵结构与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继;
  • 因此,树是递归定义的

注意:树形结构中,子树之间不能有交集,否则就不是树形结构

树的相关概念 -- 用现实的树的概念 + 人类的亲缘关系来进行命名

比较常用的概念:

节点的度:一个节点含有的子树的个数称为该节点的度;

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

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

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

树的度:一棵树中,最大的节点的度称为树的度;

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

涉及的练习:

1.2 树的表示:

其中最常用的孩子兄弟表示法。

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

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

2.二叉树概念及结构

一棵二叉树是结点的一个有限集合,该集合:
1. 或者为空;
2. 由一个根节点加上两棵别称为左子树和右子树的二叉树组成;
特点:
1. 二叉树不存在度大于2的结点;

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

特殊的二叉树:

1. 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。


2. 完全二叉树:如果树的深度为h,那么前h-1层都是结点数都达到最大值,第h层可以不满,所以满二叉树是一种特殊的完全二叉树。

二叉树的性质:


1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2 ^(i-1)个结点.

2. 若规定根节点的层数为1,则深度为h的二叉树的最大结点数是2^h-1

3. 对任何一棵二叉树, 如果度为0其叶结点个数为n0 , 度为2的分支结点个数为n2 ,则有n0=n2 +1.

4. 若规定根节点的层数为1,具有n个结点的满二叉树的深度,h= log(n+1). (是log以2为底,n+1为对数);

熟练掌握二叉树的性质可以帮助处理一些相关题目:(比如下面这个题目)

解析:

该题需要用到二叉树性质3:在任意二叉树中,度为0的节点都比度为2的节点多1个,即 n0 = n2 + 1

另外,在完全二叉树中,如果节点总个数为奇数,则没有度为1的节点,如果节点总个数为偶数,只有一个度为1的节点

因此:n0 + n1 + n2 = 1001 节点总数为奇数,没有度为1的节点

n0 + 0 + n2 = 2*n0-1 = 1001 n0 = 501

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值