跟随carl代码随想录刷题
语言:python
本文为笔者学习二叉树的笔记,主要内容来自于代码随想录。
二叉树
二叉树的定义
二叉树的定义与链表差不多,只不过二叉树的节点里多了两个指针
:指向左右孩子。
class TreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
二叉树的形式、平衡二叉树、二叉搜索树
- 二叉树主要有两种
形式
【不包含数值】:- 满二叉树
- 一棵二叉树只有
度为0
的节点和度为2
的节点,并且度为0
的节点在同一层上。 - 深度为
k
时,有2^k - 1
个节点。
- 一棵二叉树只有
- 完全二叉树
- 除了最底层节点可能没填满外,其余每层节点数都达到了最大值。并且最下面一层的节点都集中在该层
最左边的若干位置
。若最底层为n层
,则该层包含1~2^(h-1)
个节点。
堆
就是一个完全二叉树
- 除了最底层节点可能没填满外,其余每层节点数都达到了最大值。并且最下面一层的节点都集中在该层
- 满二叉树
- 二叉搜索树
二叉搜索树
是有序树
- 如果左子树不为空,则左子树上所有节点的值均
小于
它的根节点的值。 - 如果右子树不为空,则右子树上所有节点的值均
大于
它的根节点的值。
- 平衡二叉树(又称AVL树)
- 是
空树
或左右两个子树的高度差的绝对值不超过1
,并且左右两个子树
都是一棵平衡二叉树
红黑树是一种平衡二叉树 - 一定要知道自己所用语言的
常用的容器底层
是如何实现的
- 是
二叉树的存储方式
- 两种方式:
-
链式存储
- 用指针
- 元素散落在内存中的各个地址
-
顺序存储
- 用数组
- 元素在内存中是连续分布的
-
如果父节点的数组下标是
i
,那么它的左孩子就是i*2+1
,右孩子就是i*2+2
-
链式表示方式便于理解,一般都用链式存储二叉树(所以喔,
数组依然可以表示二叉树
)。
-
二叉树的遍历方式
- 主要有两种遍历方式:
-
深度优先遍历
- 📝先往深走,遇到叶子节点再往回走
- ⭐️借助
栈
实现【栈是递归的一种实现结构】 - 按照
中间节点的遍历顺序
,可细分为三种遍历方式:- 前序遍历(递归法,迭代法)
中左右
- 中序遍历(递归法,迭代法)
左中右
- 后序遍历(递归法,迭代法)
左右中
前序、中序、后序递归遍历
代码
前序、中序、后序迭代遍历
代码
- 前序遍历(递归法,迭代法)
-
广度优先遍历
-
📝一层一层地去遍历
-
⭐️借助
队列
实现 -
层次遍历(迭代法)
-
-