1. 树的存储结构
1)双亲孩子表示法
先将所有结点放到数组中,数组元素有三个域:data, parent(父节点)下标,firstchild(指向其第一个孩子的指针)。
child是在结点数组中的下标,next指向parent下一个孩子,最后一个孩子的next的域为空。
2)孩子兄弟表示法
firstchild指向第一个孩子,rightsib指向第一个右兄弟
这样表示将一个复杂的树变成了一棵二叉树
2.二叉树的性质
1.第i层最多有 个结点。
2.二叉树整棵树最多有个结点。(等比数列求和)
3.度二2的结点数设为n2,度为1的结点数设为n1,度为0的节点数设为n0,总的结点数设为n
1+2n2+n1= n
n2+n1+n0=n
---->n0=n2+1
3.完全二叉树
从满二叉树的尾部连续摘掉一些元素即的完全二叉树
完全二叉树的深度为:
因为k层的完全二叉树最多有个结点,最少结点数大于,
即<=n<
4.二叉树的遍历
1)前序(中左右)
2)中序(左中右)
3)后序 (左右中)
规律:
前序+中序可以重构二叉树
后序+中序可以重构二叉树
前序+后序不可以重构二叉树(无法确定结点是左子树还是右子树的,只能确定根结点)
5. 线索二叉树
二叉树一共有2n个指针域,有n-1个指针指向了结点,那么共有n+1个结点无用,现在线索二叉树废物利用,如果lchild=null,那么让他指向pre结点,如果rchild=nulll让他指向next结点。这个过程在第一次遍历时完成,这样之后遍历就洁身时间。
结点结构,rtag=1时rchild才指向后继结点,利用这点可以顺序访问结点,不用递归。
6.树和二叉树的转换
1.将每个结点和其兄弟连接起来
2.只保留父节点和第一个孩子之间的连线
7.哈夫曼树的构造