树与二叉树
总算把你给盼来了
现在才关注我 确实是晚了点
但没关系 来了就好
工具:vs code 、ppt
操作系统:Linux
(修改) SUMMER目录
1.二叉树
图2B
2.定义: 二叉树(binary tree)T是有限个元素的集合(可以为空)。当二叉树非空时,其中有一个元素称为根,余下的元素(如果有的话)被划分成两棵二叉树,分别称为t的左子树和右子树。 2.1特点:a.二叉树的每个元素都恰好有两棵子树(其中一个或两个可能为空)。
b.二叉树中的每个元素的子树都是有序的,也就是说,有左子树和右子树之分。
原题来自力扣
3.二叉树的遍历迭代
二叉树的存储结构——链式存储
二叉树的存储结构——链式存储(二叉链表)。
TreeNode.h文件
结构:
一、前序遍历与中序遍历构建二叉树:
01 解释: 02 实现:详细解释:力扣105题
二、中序遍历与后序遍历构建二叉树:
01 解释: 02 实现:详细解释:力扣106题
三、前序遍历与后序遍历构建二叉树:
01 解释: 02 实现:详细解释:力扣889题
3.1、二叉树的四种遍历(迭代):
✎遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。 ——《百度百科》 01 前序遍历(迭代): 首先访问根,再先序遍历左子树,最后遍历右子树。算法复杂度
时间复杂度:访问每个节点恰好一次,时间复杂度为O(N) ,其中N是节点的个数,也就是树的大小。
空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是O(N)。
详细解释:力扣144题
02 中序遍历(迭代): 首先遍历左子树,再访问根,最后遍历右子树。
算法复杂度
时间复杂度:访问每个节点恰好一次,时间复杂度为O(N) ,其中N 是节点的个数,也就是树的大小。
空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是 O(N)。
详细解释:力扣94题
03 后序遍历(迭代): 首先遍历左子树,再遍历右子树,最后访问根。
算法复杂度
时间复杂度:访问每个节点恰好一次,时间复杂度为O(N) ,其中N 是节点的个数,也就是树的大小。
空间复杂度:取决于树的结构,最坏情况存储整棵树,因此空间复杂度是 O(N)。
详细解释:力扣145题
04 层序遍历 方法1:
(图1)
方法2:(图2)
方法1与方法2区别:
1.方法1是从一维的角度上实现层序遍历,方法2是从二维的角度上实现层序遍历。
2.方法2在遍历第i层时,会返回该层的2i-1(i>=1)个元素。然后进行根出左右孩子进。
详细解释一维与二维的遍历的区别 力扣102题
算法复杂度
记树上所有节点的个数为n。
时间复杂度:每个点进队出队各一次,故渐进时间复杂度为 O(n)。
空间复杂度:队列中元素的个数不超过 n 个,故渐进空间复杂度为 O(n)。
3.3、main()调用
上述以“力扣【https://leetcode-cn.com/】”为模型,实现迭代版二叉树。
《栈c++》
《队列c++》
《树与二叉树递归版c++》
部分图片来源网络侵删致歉
转载需经同意并引用出处