二叉树的种类
不考虑数值的二叉树
1 满二叉树
如果一棵二叉树又有度为0和2的节点,且度为0的节点都在同一层上,这棵树就称为满二叉树。
深度为k,节点数为2^k-1
其实就是最后一层的孩子一个也不少,父节点都是两孩子,儿女双全
2 完全二叉树
除了最底层节点没有填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置
从满二叉树可以剪到完全二叉树,最后一层的孩子可以不全,但必须都往左靠
考虑数值的二叉树
1 二叉搜索树
二叉搜索树是一个有序的树
左子树不为空,左子树上所有节点值小于根节点的值
右子树不为空,右子树上所有节点值大于根节点的值
左右子树分别为二叉排序树
所有的子树满足,左孩子<根节点<右孩子
2 平衡二叉树(O(log(n)))
平衡二叉树,左右两个子树的高度差不超过1,并且左右两个子树都是一棵平衡二叉树
二叉树的存储结构
链式存储:带有两个指针,链表存储
顺序存储:数组存储,父节点的数组下标是i, 左右两个孩子在数组中的位置2i+1,2i+2
二叉树的两种遍历方式
深度优先遍历:先往深处走,遇到叶子节点就返回
前序、中序、后序(栈)
广度优先遍历:一层一层的遍历
层序遍历(队列,先进先出)
二叉树的定义
python方式的定义
class TreeNode(object):
def __init__(self,val):
self.value=val
self.left=None
self.right=None