理论基础
种类
1.满二叉树
2.完全二叉树:除了底层都是满的,但底部从左到右连续的
3.二叉搜索树:对节点布局没要求,顺序有要求
4.平衡二叉树:左右子树高度的绝对值不能大于1
5.平衡二叉搜索树:同时满足平衡二叉树和二叉搜索树的要求。
map set multimap multiset底层都是这个。
存储方式
1.链式存储
2.线性存储
顺序存储:2*i+1/2*i+2 左/右孩子
二叉树一般都采用链式存储,可以当作链表来处理。
二叉树遍历
1.深度优先搜索:前中后序遍历,一般递归实现,也可以使用迭代法
2.广度优先搜索:层序遍历(用队列实现对二叉树的遍历)迭代法
二叉树的定义
:一定要注意,确保可以手写出来,leetcode已经帮我们封装好了,但实际开发并不是如此
定义过程中可以考虑构造函数(赋值val等等)
递归遍历
144 145 94
1.确定递归函数的参数和返回值;
2. 确定终止条件;
3.确定单层递归的逻辑;
迭代遍历
迭代模拟递归也用栈来实现:注意进栈顺序为中右左(前序 )
前序:中左右->中右左->翻转二叉树->左右中(后序遍历)
中序遍历
此时遍历顺序和处理顺序不一样
统一迭代法
迭代问题:
说使用栈的话,无法同时解决访问节点(遍历节点)和处理节点(将元素放进结果集)不一致的情况。