数据结构-----树的易错点

简介: 数据结构-----树的易错点

1.树的度和m叉树

•度为m的树(度表示该结点有多少个孩子(分支))


任意结点的度<=m(最多m个孩子)


至少又一个结点度=m(有m个孩子)


一定是非空树,至少有m+1个结点



•m叉树


任意结点的度<=m(最多有m个孩子)


允许所有结点的度都<m


可以是空树



2.m叉树第i层至多 有个结点或度为m的树第i层至多有个结点

二叉树第i层至多有 个结点



3.高度为h的m叉树至多 个结点

高度为h的二叉树至多有个结点



注:


在这里,树的高度和深度可以看作相同的概念,因为这里侧重于树有几层,但是如果侧重于结点,那么高度和深度的概念就不同了



树的深度:(从上往下数)


  • 节点 D、E 和 F 的深度都为 2,因为从根节点 A 到节点 D ,E,F需要经过 2 条边。
  • 树的高度:(从下往上数)

  • 节点 D、E 和 F 的高度都为 1,因为它们都到达任意叶子节点的路径长度最短,只需要经过 1 条边。
  • 总的来说:

  • 树的深度是指从根节点到某个节点的路径长度。
  • 树的高度是指从某个节点到达任意叶子节点的最长路径长度。

4.高度为h的m叉树至少有h个结点(高度为h,度为m的树至少有h+m-1个结点)

5.具有n个结点的m叉树的最小高度为

最小高度----每一个结点都有m个孩子


image.png


6.二叉树

(1).设非空二叉树中度为0,1,和2的结点个数分别为n0,n1,n2,则n0=n2+1(叶子节点的个数要比二分支节点的个数多一个)


假设结点总数为n


①n=n0+n1+n2


②n=n1+2n2+1(树的节点数=总度数+1)


(2).满二叉树

高度为h的二叉树,有 个结点



1.只有最后一层有叶子结点


2.不存在度为1的结点


3.按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,结点i的父节点为i/2(向下取整)

6/2=3,7/2(向下取整)=3,所以6,7的父节点为3


(3).完全二叉树


将叶子节点从大到小删去的,都可以称为完全二叉树,例如



右下角的图,6号结点在满二叉树中本来应该为7,所以序号变了,不是完全二叉树


得出结论


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


①只有最后两层可以有叶子节点



②最多只有1个度为1的结点


③按层序从1开始编号,结点i的左孩子为2i,右孩子为2i+1,结点i的父节点为i/2(向下取整)


④如果一个完全二叉树有n个结点,那么(向下取整)为分支节点,(向下取整)为叶子节点


⑤如果某个节点只有1个结点,那么这个结点只可能是左孩子,不会是右孩子


⑥两个结论均正确


•具有n个(n>0)结点的完全二叉树的高度h(深度)为 (向上取整)


推导过程


高为(h)的满二叉树共有个结点


高为(h-1)的满二叉树共有个结点




•具有n个(n>0)结点的完全二叉树的高度h(深度)为(向下取整)


高为h的完全二叉树至少个结点


高为h的完全二叉树至少个结点


(向下取整)


⑦对于完全二叉树,可以优结点数n,推出度为0,1和2的结点个数为n0,n1和n2


完全二叉树最多只有一个度为1的结点,即


n1=0或1


n0=n2+1--->n0+n1一定为奇数


若完全二叉树有2k个结点,则必有n1=1,n0=k,n2=k-1


若完全二叉树有2k个结点,则必有n1=0,n0=k,n2=k-1


(4).二叉排序树


1.左子树上所有结点的关键字均小于根结点的关键字;


3.左子树和右子树又各是一棵二叉排序树。



(5).平衡二叉树


树上任一结点的左子树和右子树深度(高度)之差不超过1



7.在n个结点的二叉链表中,有n+1个空指针域

n个结点中,若每个结点都有左孩子和右孩子,那么最多有2n个指针


反过来,每个结点有且仅有一个父节点,除了头结点以外,所以最少有n-1个指针,那么空指针为2n-(n-1)=n+1


目录
相关文章
|
10月前
|
算法
数据结构之博弈树搜索(深度优先搜索)
本文介绍了使用深度优先搜索(DFS)算法在二叉树中执行遍历及构建链表的过程。首先定义了二叉树节点`TreeNode`和链表节点`ListNode`的结构体。通过递归函数`dfs`实现了二叉树的深度优先遍历,按预序(根、左、右)输出节点值。接着,通过`buildLinkedList`函数根据DFS遍历的顺序构建了一个单链表,展示了如何将树结构转换为线性结构。最后,讨论了此算法的优点,如实现简单和内存效率高,同时也指出了潜在的内存管理问题,并分析了算法的时间复杂度。
253 0
|
6月前
|
算法 Java
算法系列之数据结构-Huffman树
Huffman树(哈夫曼树)又称最优二叉树,是一种带权路径长度最短的二叉树,常用于信息传输、数据压缩等方面。它的构造基于字符出现的频率,通过将频率较低的字符组合在一起,最终形成一棵树。在Huffman树中,每个叶节点代表一个字符,而每个字符的编码则是从根节点到叶节点的路径所对应的二进制序列。
143 3
 算法系列之数据结构-Huffman树
|
6月前
|
存储 自然语言处理 数据库
【数据结构进阶】AVL树深度剖析 + 实现(附源码)
在深入探讨了AVL树的原理和实现后,我们不难发现,这种数据结构不仅优雅地解决了传统二叉搜索树可能面临的性能退化问题,还通过其独特的平衡机制,确保了在任何情况下都能提供稳定且高效的查找、插入和删除操作。
462 19
|
7月前
|
存储 机器学习/深度学习 人工智能
C 408—《数据结构》易错考点200题(含解析)
408考研——《数据结构》精选易错考点200题(含解析)。
443 27
|
8月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
185 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
8月前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
176 12
|
8月前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
159 10
|
8月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
248 3
|
11月前
|
存储 算法 搜索推荐
探索常见数据结构:数组、链表、栈、队列、树和图
探索常见数据结构:数组、链表、栈、队列、树和图
310 64
|
10月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
259 5