树的概念:
根有子节点,子节点又是一个子树的根
T1,T2,T3换一个顺序就不是原来的树了,就称为有序树,T1,T2,T3换一个顺序就还是原来的树,就称为无序树
二叉树不是树的特殊情况,二叉树中的一个结点必须表明该结点是左节点还是右节点,即便它没有兄弟结点。而树不必区分左右。
二叉树的性质
每层最少有1个结点
性质2:深度为k的二叉树总共最多有2k-1个结点
深度为k的二叉树最少有k个结点
二叉树的存储
顺序存储
实现: 按满二叉树的结点层次编号,依次存放二叉树中的数据元素
情况1:满二叉树和完全二叉树:
情况2:非完全二叉树和非满二叉树
链式存储
可以用来找前驱(双亲)
二叉树的遍历
深度优先搜索
递归或则迭代
按照一个方向往底下搜一直搜到终点我们再回退,然后再换下一个方向再往底下搜一直搜到终点我们再回退。
先序遍历
中序遍历
后序遍历
广度优先搜索
层序遍历
迭代的方法
根据遍历类型还原二叉树
根据先序和中序确定二叉树
根据后序和中序确定二叉树
以前序遍历为例二叉树的所有操作都是基于:对根节点进行操作,然后对左子树进行操作(递归),然后再对右子树进行操作(递归)