- 由二叉树的前序和中序遍历结果可以推出整个二叉树的结构;进而可以得到后序遍历的结果。类似的,由后序,中序可以推出二叉树结构。唯独由前序,后序不能推出中序。为什么呢?我想了下,原因很显然,前序中可以明确知道根节点是第一个元素,后序中也只能确定根结点,这样就不能确定左子树和右子树各是哪些元素了。而有了中序遍历的结果就不同了,因为中序遍历可以用已知的根结点将遍历分成左右两部分。
- 根据1中的总结,总结一下,如何根据前序遍历和中序遍历的结果将树重构出来。首先,根结点一定是前序遍历的第一个元素,好吧,找到它,然后看在中序遍历中这个元素位于哪里。那么这个元素可以把中序遍历分为左右两个子树。以此类推,可以在纸上很容易就画出树。然后得出它的后序遍历的结果。
- 二叉树的概念:不能理解为一种特殊的树,因为它跟树是不同的。首先,二叉树可以为空,其次,有“次序”,也就是说有一些结构看起来不同,但是在树里可能就是相同的结构,而在二叉树里视为不同的结构。二叉树就是度最大为2,有左右子树之分,次序不能任意颠倒。
- 完全二叉树:每一层次的节点可以与满二叉树编号的结点一一对应。
- 满二叉树:每一层次上的节点数目达到最大的二叉树。满二叉树当然是完全二叉树。
- 平衡二叉树
- 二叉树的存储结构有两种。一种是顺序的,也就是按树的层次,从根结点开始一层一层遍历,将结点的值存到数组里,遇到一层上结点为空则用0代替;另一种是链式的存储,一般是定义一个结构体,包括value,左孩子,右孩子。还有一种是多了一个指向根结点的指针。
- 二叉树的一些特性总结,见严蔚敏的数据结构书123页
- 堆其实就是一种完全二叉树。只是根的关键字一定小于或等于它的孩子结点的关键字。
- 根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆.
根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆.
注意:
①堆中任一子树亦是堆。
②以上讨论的堆实际上是二叉堆(Binary Heap),类似地可定义k叉堆。 - 二叉查找树的平均查找长度为O(log2n)