二叉树
树是⼀种⾮线性的数据结构,它是由n(n>=0)个有限结点组成⼀个具有层次关系的集合。把它叫做 树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。
⼀棵⼆叉树是结点的⼀个有限集合,该集合: 或者为空 或者是由⼀个根节点加上两棵别称为左⼦树和右⼦树的⼆叉树组成。
有两种特殊的⼆叉树
1. 满⼆叉树:⼀棵⼆叉树,如果每层的结点数都达到最⼤值,则这棵⼆叉树就是满⼆叉树。也就是 说,如果⼀棵⼆叉树的层数为K,且结点总数是,则它就是满⼆叉树。(除最后一层无任何子节点外,每一层上的所有结点都有两个子结点的二叉树。)
2. 完全⼆叉树:完全⼆叉树是效率很⾼的数据结构,完全⼆叉树是由满⼆叉树⽽引出来的。对于深度 为K的,有n个结点的⼆叉树,当且仅当其每⼀个结点都与深度为K的满⼆叉树中编号从0⾄n-1的结 点⼀⼀对应时称之为完全⼆叉树。要注意的是满⼆叉树是⼀种特殊的完全⼆叉树。
若规定根结点的层数为1,则⼀棵⾮空⼆叉树的第i层上最多有(i>0)个结点
若规定只有根结点的⼆叉树的深度为1,则深度为K的⼆叉树的最⼤结点数是(k>=0)
对任何⼀棵⼆叉树,如果其叶结点个数为n0,度为2的⾮叶结点个数为n2,则有n0=n2+1
具有n个结点的完全⼆叉树的深度k为上取整
对于具有n个结点的完全⼆叉树,如果按照从上⾄下从左⾄右的顺序对所有节点从0开始编号,则对 于序号为i的结点有:
若i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,⽆双亲结点
若2i+1<n,左孩子序号:2i+1,否则没有左孩子
若2i+2<n,右孩子序号2i+2,否则没有右孩子
二叉树的遍历
先序遍历:先遍历根节点,后遍历左子树,最后遍历右子树
中序遍历:先遍历根节点的左子树,后遍历根节点,最后遍历右子树
后序遍历:先遍历根节点的左子树,后遍历右子树,最后遍历根节点
层序遍历:层序遍历就是从所在⼆叉树的根节点出发,⾸先访问第⼀层的树根节点,然后从左到 右访问第2层上的节点,接着是第三层的节点,以此类推,⾃上⽽下,⾃左⾄右逐层访问树的结点的过程
层序遍历需要借助于队列。
首先将根节点入队,随后将根节点的左孩子、右孩子分别入队,然后将根节点出队。以此类推,直至队列为空表示遍历完成。