树、森林与二叉树

树(Tree)

树是n个结点的有限集(n≥0),当n=0时,我们称其为空树
树的概念
当n>0时,它将满足以下条件:
①有且仅有一个可以成为’根‘的结点;
②它的其他结点可以分为m个分支T1,T2…Tm(互不交集),每个集合本身也是一棵树,称为“根的子树”。
在这里插入图片描述
结点度:即一个树中,它子树的个数,比如这里A的结点度为3;
深度:一个树中结点的最大层次,这里的深度为4;

祖先与子孙
从目标结点到根结点的途中,经过的所有点(除了目标结点)都是目标结点的”祖先“;反之,根结点到目标结点的途中,经过的所有结点都是根结点的“子孙”。
例如图中黄色路径上,A、B为E的祖先,B、E又为A的子孙;

双亲与孩子
在树中,除了根结点外,所有结点都有它的前驱,那么这个前驱就是目标结点的“父母”,反之,该结点是其前驱的“孩子”。
例如紫色路径,H、I为D的孩子,D为H、I的双亲
在树结构中,往往一个结点有一个双亲、多个孩子(一对多);
而在线性结构中,一个结点对应一个前驱与后继(一对一)。

兄弟堂兄弟
在树中,一个结点可能会有多个直接后继(分支),这些分支之间的关系为“兄弟”,例如图中H与I的关系;
而属于一个父母的结点(级别相同),如B、C;他们的孩子的关系则为堂兄弟,如F与G。

叶子结点:又称为终端结点,是树的最后一个结点,即:度=0;
分支结点:树的结点,度≠0;

森林

概念:由m棵互不相交的树组成(m≥0),但其实一棵树也可以成为森林,只需要把它原来的根结点删掉即可。因此又引入一个概念,森林不一定是树,但树一定是森林。

二叉树

概念:结构最简单,规律性也最强,是结点数n>0的有限集,也可以是空集(n=0),或者由两棵互不相交的、分别称为右子树、左子树的二叉树构成;
特点:①每个结点最多只有两个孩子(也就是说每个结点的度必须≤2)②二叉树的子树区分左右,且不可以对调(对调相当于另一棵二叉树),但这左、右二叉树可以为空;

ps:二叉树并不是树的特殊情况
原因:①二叉树的每个结点恰好有两个子树,二者可以都为空,也可以不为空;而树中每个结点都可以有无数个子树,且树不可以为空(树是图的一种形式);②二叉树的每个结点的子树都是有序的,也就是说可以区分左、右(这是二叉树与树的根本区别
举例:(数据结构王卓老师课上引用的)
这里有三个结点,分别用树、二叉树,可以构成哪几种样式?
在这里插入图片描述
这里可以明显看出,二叉树的样式有五种,丰富度明显高于树;因为二叉树有序,能分左右,例如:图中二叉树的第二形态为:根结点->左孩子->右孩子;由此可以衍生出其他三种;(一个根结点连接两个子结点为特例哈)在这里插入图片描述
二叉树分左右子树,两个子树可以一个为空,也可以都为空。
虽然二叉树与树不能画上等号,也没有包含与被包含的关系,但大部分概念都可以互相套用,例如兄弟节点,深度,长度,祖先子孙…

二叉树的性质
①二叉树的第i层至少有一个结点,至多为2^(i-1)个
②深度为k的二叉树,至少有k个结点,至多有2^i-1个
③对于任何一科二叉树,如果其叶子结点为n0个,度为2的结点数为n2,则n0 = n2+1
④具有n个结点的完全二叉树深度为|㏒2 n|+1
注:第四点非常重要,这反映了树的深度与结点的关系
证明:假设一棵二叉树的深度为k,结点数为n,则有如下关系:
2^(k-1) -1< n <= 2^k -1 //这时候,不等式两边的1就非常的麻烦,所以我们改变不等式的符号,变成:
2^(k-1) <= n <2^k
两边取对数,得:k-1 <= log2 n < k
因为k必为整数,所以k = |log2 n| +1
⑤一棵有n个结点的完全二叉树,深度为|log2 n |+1
a、若i = 1,则结点i为二叉树的根,该点无双亲;若i>1,则其双亲为结点i/2
b、若2i>n,则结点i为叶子结点,没有左孩子;否则,其左孩子为2i
c、若2i+1>n,则结点i没有右孩子,否则其右孩子为2i+1
特殊二叉树
①满二叉树
②完全二叉树

满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树

二叉树的存储结构

①顺序存储
缺点:容易浪费空间,最坏的情况下,深度为k的二叉树,有效的点只有k个(单枝树),却需要2^k-1个数组空间
(比如下图)
在这里插入图片描述
在这里插入图片描述

特点:结点间的关系蕴含在存储位置中,一目了然地看出各个结点之间的关系,这种存储方式适合满二叉树、完全二叉树
②链式存储
在链式存储中,每个结点都有自己的左孩子、右孩子
在这里插入图片描述
同时,在有n个结点的二叉链表中,会有2n个链域;除了根结点,每个结点有且仅有一个双亲,所以有双亲的链域为n-1个
有上述说明可知:在有n个结点的二叉链表中,会有n+1个空指针域

二叉树的遍历

方法
依次遍历二叉树中的三个组成部分,便是遍历了整个二叉树,其中我们主要探讨三种遍历方法:(主要根据根结点的遍历先后顺序来取名)
①DLR:先序,顾名思义,先遍历根结点,再左结点,最后是右节点
②LDR:中序,左-根-右
③LRD:后序,左-右-根
例题
在这里插入图片描述(用三种方式写)

在这里插入图片描述例题二,典型的表达式

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值