神奇树(tree)在哪里【CSP初赛必看!】

圣徒们我又来了。

盘点各种树。

因为是CSP初赛内容,所以没有代码示例。

目录

一、树的定义

一.熟悉树

二.度

三.树的特性:

二、二叉树

一.特别二叉树

二.二叉树的性质

三.二叉树的遍历

四.举例说明


一、树的定义

树就是……呃……树

树是一种非线性的数据结构,是由n(n大于等于0)个结点组成的有限集合

当n为0时,树为空。

一.熟悉树

先来熟悉一哈:

画一个简单的树:

观察B结点。B结点有父结点A,有兄弟节点C和D。也就是说,结点A有子结点B.C.D。结点A叫根结点,位于整颗树的最上方,根节点没有父结点。B.D.E.F叫叶子结点,没有各自的子结点。

二.度

树中一个结点的孩子个数称为该结点的度,树中结点的最大度数称为树的度。

用这棵树来举栗:

C的度为2,A的度为3,B.E.F.D.的度为1,整颗树的度为3.

三.树的特性:

1.n个结点的树中有n-1条边。

2.树中的结点数等于所有结点的度数加1.

3.度为m的树中第i层上至多有m的i-1次方个结点(i > = 1)

4.高度为h的m叉树至多有(m的h次方−1)/(m−1)个结点。

5.具有n个结点的m叉树的最小高度为[log m(n(m−1)+1)] 。

二、二叉树

第一种缺德的就是二叉树。有以下几种情况。

这里有一颗野生的。薅过来用用。

这就是众所周知的二叉树。

二叉树每个父结点的子结点用左右来区分。

比如说:D有左子树F,有右子树G;

G有左子树H,有右子树I。

二叉树有几个特别的需要记住。

一.特别二叉树

第一个是斜树。所有结点只有左子树的叫做左斜树,所有结点只有右子树的叫右斜树。统称为斜树。

第二个是满二叉树。在一棵二叉树中,每个结点都有左右子树,截止到叶节点一共m层。近年因为歧义,在没有声明特殊情况的前提下,满二叉树指的就是完美二叉树,二者意思相同。

满二叉树第n层有2的n-1次方个结点;

n层一共有2的n次方-1个结点。

第三个是完全二叉树。在完美二叉树最后一层叶节点中挖去连续的q个,使最后一层的叶节点是连续的。完全二叉树可能是完美二叉树,也可能不是。举个栗子:


其中结点1没有右子树。

二.二叉树的性质

二叉树的性质有以下这些:

1.任意一棵树,若结点数量为n,则边的数量为n − 1。

2.非空二叉树上的叶子结点数等于度为2的结点数加1,就是No=N₂+1 。

3.非空二叉树上第k层上至多有2k − 1个结点(k≥1) 。

4.高度为h的二叉树至多有2 h− 1个结点(h≥1) 。

5.对完全二叉树

有以下关系:

i>1时,结点i的父结点的编号为floor(i / 2)。

当i 为偶数时,它是父结点的左孩子;

当i为奇数时,它是父结点的右孩子。

当2*i≤n 时,结点i的左孩子编号为2*i否则无左孩子。

当2*i+1≤n时,结点i的右子树编号为2*i+1,否则无右子树。

结点i所在层次(深度)为{log₂i} +1。

具有n个(n>0) 结点的完全二叉树的高度为{log₂n}+1。

三.二叉树的遍历

最让人头疼的是缺德的遍历。

Tips:初赛考的是顺序,不是程序。

遍历分为先序遍历.后序遍历.中序遍历和层次遍历。

除了层次遍历,每种遍历对应一种表达式,每种相对应的遍历和表达式结果相同。

先序遍历对应前缀表达式(波兰式);

后序遍历对应后缀表达式(逆波兰式);

中序遍历对应中缀表达式;

已知前序序列中序序列或已知后序序列和中序序列都可以确定一棵二叉树。但已知前序序列和后序序列不行。

先序遍历:

先访问父结点,再访问左子树,最后访问右子树。

中序遍历:

从左到右依次遍历。

后序遍历:

先访问左子树,再访问右子树,最后访问父结点。

先左后右再上

不会?

四.举例说明

我们

野生二叉树飞来!

这是一颗野生的二叉树。我们对他进行中序遍历

先访问左子树。

根节点1的左子树为2,

但是2也有自己的子结点3。

3没有子结点,为2的左子树,写上。然后是2,写上。

2没有右子树,跳过。

然后是1,写上。

1有右子树4,

但是4有左子树5,写上。

1,写上。

4有右子树6,写上。

最后答案是321546。

我们再

野生二叉树飞来!

野生的,快点告诉拔叔!让他请我们吃饭!

哎呀弄得有点大。

我们对他前序遍历。

首先是A,写上。

然后是C,C是A的左子树,是FE的父结点,符合条件,写上。

然后FKP也符合上述条件,依次写上。

然后看C的右子树E,符合条件,写。

J是E的左子树,写。

O和 N分别是J的左右子树,依次写上。

有一个小妙招啊,写过的结点把他盖上,别让他扰乱了思路。

I是E的左子树,M是I的右子树。依次写上。

再看A的右子树B,写上。总之就是先看父结点,再看左右子结点。依次写上就可以了。

……

不说了,最后答案是ACFKPEJONIMBDHGL。

呃,有亿点点长。

还是再


栗子!

野生二叉树飞来!

这次还可以。

我们对它后序遍历。

先访问根节点A的左子树B,B也有左子树D,

D也有左子树G,

G没有子结点,写上。

右子树H没有子结点,写上。

最后访问父结点D,写上。

D作为B的左子树有兄弟节点E,是B的右子树,按照先左后右再上的原则,写E。

然后是父结点B。

B作为A的左子树有兄弟节点C,应该写C,

但C有右子树F,

F有左右子结点IJ,按照先左后右再上,依次写IJFC

最后写A。

所以最后答案是……?

评论区见。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值