300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【数据结构】树 二叉树 满二叉树 完全二叉树初步理解

【数据结构】树 二叉树 满二叉树 完全二叉树初步理解

时间:2024-05-27 22:43:09

相关推荐

【数据结构】树 二叉树 满二叉树 完全二叉树初步理解

文章目录

树的相关基本术语树的表示形式树结构典型应用场景二叉树基本概念满二叉树概念及其性质完全二叉树的概念和性质一道完全二叉树的面试题

树的相关基本术语

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6

叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I…等节点为叶节点

非终端节点或分支节点:度不为0的节点; 如上图:D、E、F、G…等节点为分支节点

双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点; 如上图:A是B的父节点

孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点; 如上图:B是A的孩子节点

兄弟节点:具有相同父节点的节点互称为兄弟节点; 如上图:B、C是兄弟节点

树的度:一棵树中,最大的节点的度称为树的度; 如上图:树的度为6

节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;

树的高度或深度:树中节点的最大层次; 如上图:树的高度为4

堂兄弟节点:双亲在同一层的节点互为堂兄弟;如上图:H、I互为兄弟节点

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

子孙:以某节点为根的子树中任一节点都称为该节点的子孙。如上图:所有节点都是A的子孙

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

树的表示形式

树结构相对线性表就比较复杂了,要存储表示起来就比较麻烦了,要保存值域,也要保存结点和结点之间的关系,实际中树有很多种表示方式如:双亲表示法,孩子表示法、孩子双亲表示法以及孩子兄弟表示法。。。树的表示形式有很多种,但是如何表示合理呢?这里我介绍一种最为合理的树的表示形式左孩子右兄弟法;

左孩子右兄弟法:顾名思义就是一个树的结构:包含左孩子指针,和右兄弟指针,加上一个值域值

注意哦

这里的左孩子指针指向的是父节点的第一个孩子指针,其他的孩子都较为兄弟了!

左孩子:相对于父节点的叫法;

右兄弟:相对于左孩子的叫法;

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

如图:

画的好看的画:

这个左孩子有兄弟很好的表示了树的结构

树结构典型应用场景

我们的文件系统就是啦!

无论是windows的文件系统,还是Linux的文件系统都有应用到树的结构!

二叉树基本概念

每个结点的度,最大为2的树就是二叉树,那么也就是说,二叉树可以度为1,度为0,都是二叉树。

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

◼ 对于任何一棵非空二叉树,如果叶子节点个数为 n0,度为 2 的节点个数为 n2,则有:n0 = n2 + 1

证明

假设度为 1 的节点个数为 n1,那么二叉树的节点总数 n = n0 + n1 + n2

二叉树的边数 T = n1 + 2 * n2 = n – 1 = n0 + n1 + n2 – 1

因此 n0 = n2 + 1

也就是:二叉树的度为0的结点永远比度为2的结点多1个

满二叉树概念及其性质

最后一层的结点度为0,其他结点度为2

基本性质:

满二叉树的结点个数为 2h-1,其中h表示树的高度;

满二叉树从数学角度来说,就是一个等比数列:20+21+…+2h-1 = 2h-1;

很自然的第 i 层有2i-1个结点;

完全二叉树的概念和性质

叶子节点只会出现最后 2 层,最后 1 层的叶子结点都靠左对齐

完全二叉树从根结点至倒数第 2 层是一棵满二叉树

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

性质:

度为1的结点一定是左子树;

度要么为1,要么为0

对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号:那么就会有:(对于编程的写法,这个规律是成立的)

左孩子结点的下标:2*parent +1;

右孩子结点的下标:2*parent +2;

父亲结点的下标:(child -1) / 2; 其中child为左右孩子都行。

画个图就出来的性质!

一道完全二叉树的面试题

如果一棵完全二叉树有 768 个节点,求叶子节点的个数?

假设叶子节点个数为 n0,度为 1 的节点个数为 n1,度为 2 的节点个数为 n2

总结点个数 n = n0 + n1 + n2,而且n0 = n2 + 1

✓ 得到 n = 2n0 + n1 – 1

完全二叉树的 n1 要么为 0,要么为 1

✓ n1为1时,n = 2n0,n 必然是偶数

➢ 叶子节点个数 n0 = n / 2,非叶子节点个数 n1 + n2 = n / 2

✓ n1为0时,n = 2n0 – 1,n 必然是奇数

➢ 叶子节点个数 n0 = (n + 1) / 2,非叶子节点个数 n1 + n2 = (n – 1) / 2

叶子节点个数 n0 = floor( (n + 1) / 2 ) = ceiling( n / 2 )

非叶子节点个数 n1 + n2 = floor( n / 2 ) = ceiling( (n – 1) / 2 )

因此叶子节点个数为 384

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。