一、种类:
1. 满二叉树 深度为k 节点数量为2^k-1
2. 完全二叉树 除了底层以外 其他层都是满的 底层:从左到右节点连续
3. 二叉搜索树
是一个有序树。
若左子树不为空,则左子树上所有节点的值都小于它的根节点的值
若右子树不为空,则右子树上所有节点的值都大于它的根节点的值
它的左、右子树也分别为二叉排序树
二、存储方式
1. 链式存储:用指针
2. 顺序存储:用数组
如果父节点的数组下标是 i,那么它的左孩子就是 i * 2 + 1,右孩子就是 i * 2 + 2。
三、二叉树的遍历方式
1. 深度优先遍历:先往深走,遇到叶子节点再往回走
(1)前序遍历(递归法,迭代法) 中左右
(2)中序遍历(递归法,迭代法) 左中右
(3)后序遍历(递归法,迭代法) 左右中
【记忆技巧:前中后指的是中间节点的遍历顺序】
2. 广度优先遍历:一层一层的去遍历
(1)层次遍历(迭代法)
(stack就是递归的一种实现结构)
四、二叉树的定义
class TreeNode:
def __init__(self, val, left = None, right = None):
self.val = val
self.left = left
self.right = right
leetcode题目中一般都给定义好了,但是还是要掌握是怎么写定义的,面试的时候有可能会考察写出二叉树的定义。