第五章小结

树(树是n(n>=0)个结点的有限集合,n为0,称为空树。)

基本性质:1,有且仅有一个根结点  2,树的结点数等于所有结点的度数加一。 3,度为m的树的第i层最多有m^(i-1)个结点,深度为k时最多有m^i-1个结点。 4具有n个结点的m叉树的最小高度为↳log以m为底n的对数↲+1(完全m叉树)

二叉树

基本类型:

1满二叉树:一棵高度为h,且含有2^h-1个结点的二叉树为满二叉树。对于编号为i的结点,若存在,其双亲的编号为[i/2](向下取整),左孩子为2i,右孩子为2i+1。

2 完全二叉树:设一个高度为h、有n个结点的二叉树,当且仅当其每个节点都与高度为h的满二叉树中编号1~n的结点一一对应时,称为完全二叉树1)当i>1时,结点i的双亲结点标号为↳i/2↲,即当i为偶数时,其双亲结点的编号为i/2,它是双亲结点的左孩子,当i为奇数时,其双亲结点的编号为(i-1)/2,它是双亲结点的右孩子(2)2i<=n时,结点i的左孩子编号为2i,否则无左孩子。3)2i+1<=n时,结点i的右孩子编号为2i+1,否则无右孩子

3 二叉排序树:一颗二叉树(非空)对于任意结点若存在左子树或右子树,则其左子树上所有结点的关键字均小于该结点,右子树上所有结点的关键字均大于该结点。

4 平衡二叉树:树上任意结点的左子树和右子树的深度之差不超过1。

存储结构:

1,顺序存储:用一组连续的存储单元一次自上而下、自左至右存储完全二叉树上的节点元素。

2,链式存储:用链表来存放一棵二叉树,二叉树中每个结点用链表的一个链接点来存储。

遍历二叉树;

1先序遍历(DLR):

 

 

2中序遍历(LDR:

 

 

 

后序遍历(LRD):

 

 

 

(以上三种都是运用了递归的思想)

层次遍历(运用了栈先进先出的特性):

 

 

线索二叉树的中序遍历:

 

 

树和森林:

树的存储结构:

1双亲表示法:用一组连续的存储单元存储树的结点,每个结点出来数据域data外,还有parent域用以指示双亲结点的位置。

2孩子表示法:将每个结点的孩子结点都用单链表连接起来形成一个线性结构,n个结点具有n个孩子链表

3 孩子兄弟表示法(左孩子右兄弟):以二叉链表作为树的存储结构,又称二叉树表示法。左指针存放结点第一个孩子节点指针,右指针存放下一个兄弟节点指针

森林与二叉树的转换:将每一棵树转换为二叉树,将每棵二叉树的根依次作为上一棵二叉树的右子树。(注意:二叉树转换为树或森林是唯一的)

哈夫曼树:

概念:哈夫曼树又称最优树,是一类带权路径最短的树(树的带权路径长度(WPL):树的所有叶子结点的带权路径长度之和)

特点:权值越大的结点离根结点越近。

PTA总结

1求二叉树的叶子结点个数

1在Create函数中,也是运用了递归思想读入数据

2 Count函数也是运用了递归思想

if(T==NULL)return 0;if(T->lchild==NULL&&T->rchild==NULL) return 1;(找到叶子)不然就return Count(T->lchild)+Count(T->rchild);递归中把叶子树加在一起。

2 List Leaves

1 在create函数中,当读入‘-’时,实际放入-1,便于后面的操作。同时运用一个check数组找出根结点。

2 然后用层次遍历从上到下,从左到右找出叶子结点就好了

3树的同构

1 在sortlevel函数中分析多种情况,先分析是不是都是空树(是就是同构),再分析根结点是不是相同(不相同就不是同构)接着判断当左儿子都为空时,判断右儿子是否同构,当左儿子结点都不为空且数据相等时,对左儿子的左右子树进行递归,当左儿子不一样时,则左右交换后递归

posted @ 2020-05-30 16:17  许剑瀚  阅读(169)  评论(0编辑  收藏  举报