//本文主要面对个人本次期末考试
首先是关于二叉树的一些计算上:
性质1:二叉树第i层上的结点数目最多为2i(i>=1)
性质2:深度为k的二叉树至多有2k+1-1个结点(k>=1)//上面等比数列求和
性质3:包含n个结点的二叉树的高度至少为(log2n)//本校教材中:最大层数=深度=高度;
性质4:在任意一棵二叉树中,若叶结点的个数为n0,度为2的结点数为n2,则n0=n2+1
满二叉树
定义:高度为h,并且由2h-1个结点组成的二叉树,称为满二叉树。(节点数最多)
完全二叉树
定义:一棵二叉树中,只有最下面两层结点的度可以小于2,并且最下层的叶结点集中在靠左的位置上,这样的二叉树称为完全二叉树。//叶结点只能出现在最下面地那两层。
如果一棵完全二叉树的结点总数为n,那么叶子结点等于n/2(当n为偶数时)或者(n+1)/2(当n为奇数时)///用上面的性质1,可以证明。
二叉树的存储结构:
顺序存储:A[i]的父节点下标为[i/2],左孩子为[2*i],右孩子为[2*i+1]
链式存储:一般是三个域:left data right
二般一点的是四个域:left parent data right
二叉树的遍历
1.根据两个遍历确定二叉树。
2.先根遍历是一直访问左节点,也一直压栈,直到左为空再弹出最后那个元素,往右访问一个。(换言之,栈中的变化是从一直向左,到向左不行了,换一下向右,然后继续向左走。直到栈空)。
中根遍历和先根遍历相似,只是输出变在了弹栈的那一行,也就是说出栈进栈还是一样的。
高能::对于入栈序列1....n,有多少种可能的出栈序列Catalan(n)=C(2n,n)/(n+1);
3.非递归后跟遍历简直就是个坑,最方便的就是设置一个标号i,i=2的时候再出栈。
线索二叉树,这一块暂时只要知道空的地方:左指前,右指后,最前面和最后面赋值为NULL(有一个Thread域来表示是不是为空=1。)
//可以很方便的找到给的节点的遍历的前面和后面的是什么东西。一路左走(右走)到Thread=1,就是要找的第一个(最后一个)点。
关于中序线索二叉树的其他内容在PPT9,P27。
中序扩展二叉树,就是以空间换时间的代价,把标记去掉了,换成了指针域。