20.12.9
寻寻寻寻更新
树与二叉树、树与森林的PTA例题,
树与森林编程题未处理。
差huffman树。
1、树
1、树是n ( n > = 0 ) n(n>=0)n(n>=0)结点的有限集,有且仅有一个特定的称为根的结点,当n>1时,其余结点可分为m个互不相交的有限集,每个集合都是一棵树,是根的子树。
2、结点的度:子树的个数;
树的度:树的节点中最大度
叶节点(终端结点):度为0的节点;而分支结点是度不为0的结点。
树的深度:树所有结点中最大层次(根节点的层次为1)
路径长度:结点个数-1,或者说是分支条数
兄弟结点是与当前结点父结点相同的结点
森林是m ( m > = 0 ) m(m>=0)m(m>=0)棵互不相交的树的集合
2、二叉树
1、二叉树是另一种树形结构,每个结点至多只有两棵子树,且有左右之分,需要注意的是,从树的概念衍生来的二叉树是可以为空树的。
2、在二叉树的第i层上至多有2i-1个结点(i>=1)
3、深度为k的二叉树至多有2k-1个结点(k>=1),由此,深度为k且有2k −1个结点的二叉树是满二叉树;而完全二叉树是其n个结点与满二叉树的n个结点编号一致。
4、对任何一棵二叉树T,若叶结点数为n0,度为2的结点的个数n2 ,则n0 = n 2 + 1
5、对于完全二叉树T,具有n个结点,其深度为log 2 n(向下取整) + 1
6、对于有n个结点的完全二叉树,i为结点编号,如果i = 1则i是二叉树的根,若i > 1 则其双亲是i / 2 (向下取整);另外,如果2 i > n则i 无左孩子,2 i + 1 > n 则i无右孩子0;
即完全二叉树的左孩子编号为双亲的2倍,有孩子为2倍加一。
3、存储结构
1、顺序存储,以数组下标表示结点编号,明显可以看出,如果树不为完全二叉树,则浪费了很多存储空间
2、链式存储 分为数据域和左右指针域,链的头指针指向根节点。
还有一种三叉链表,多加了一个指向双亲结点的指针。
注:空指针域=n0+n1+n2+1
4、二叉树基本操作
孩子兄弟表示法
6、哈夫曼树
树中一定没有度为一的节点
树中两个权值最小的节点一定是兄各结点
树中任一非叶结点的权值一定不小于下一层任一结点的权值
一棵哈夫曼树的带权路径长度等于其中所有分支结点的权值之和
任何一个结点的度都是0或者1.
5、树的PTA例题
1、已知一棵二叉树的先序遍历结果是ABC, 则CAB不可能是中序遍历结果。
不可能出现,c在a前面,b却在a后面的情况。
2、如果一棵非空k(k≥2)叉树T中每个非叶子结点都有k个孩子,则称T为正则k叉树。若T的高度为h(单结点的树h=1),则T的结点数最多为:(kh−1)/(k−1)
等比数列求和而已。
3、 在最大堆(大顶堆)中,从根到任意其它结点的路径上的键值一定是按非递增有序排列的。
4、具有1102个结点的完全二叉树一定有__个叶子结点。551
完全二叉树,偶数节点一半是叶子结点,奇数结点,加一再除以二是其叶子结点。
5、若一棵二叉树的前序遍历序列是{ 4, 2, 1, 3, 6, 5, 7 },中序遍历序列是{ 1, 2, 3, 4, 5, 6, 7 }
有中序遍历就可以推导
6、按照二叉树的定义,具有3个结点的二叉树有几种?5。
此处只说形状,不分数值大小。
7、
已知一棵完全二叉树的第6层(设根为第1层)有8个叶结点,则该完全二叉树的结点个数最多是:111
有坑,注意实际上最多是7层,第六层8个叶节点,第七层48个叶结点。
8、
在一个用数组表示的完全二叉树中,如果根结点下标为1,那么下标为17和19这两个结点的最近公共祖先结点在哪里(数组下标)? (注:两个结点的“公共祖先结点”是指同时都是这两个结点祖先的结点)
答案4,同第四题逻辑。
9、