数据结构 --- 树

(Tree)是n(n>=0)个结点的有限集。

在任意一棵非空树中:

(1)有且仅有一个特定的称为(Root)的结点;

(2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,...,Tn,其中每个集合本身又是一棵树,并称为根的子树(SubTree)


森林:n棵互不相交的树


二叉树:度最多为2的树

二叉树特点:1>n0 = n2 + 1

                      2>非空二叉树上第k层上至多有2^{k-1}个结点(k >= 1)

                      3>高度为H的二叉树至多有2^{H}-1个结点(H >=1)


 满二叉树:对于一棵高度为H的二叉树,将含有2^{H}-1个结点的二叉树称为满二叉树

满二叉树特点:满二叉树只有最下面一层含有叶结点,并且除了叶结点外每个结点的度均为2,第i层(1<= i =< H-1)上结点的个数为2^{i-1}


完全二叉树:与满二叉树相比,第H层从右边开始连续缺失若干个叶结点,这样的二叉树称为完全二叉树。满二叉树是完全二叉树的特例。

完全二叉树特点:叶结点只可能在层次最大的两层上出现,且最下层的叶结点都集中在左边连续的位置;如果有度为1的结点,只可能有一个,且该结点只有左孩子。


二叉排序树(二叉查找树,BST):左子树结点值 <= 根结点值 =< 右子树结点值

二叉排序树特点:1>若左子树非空,则左子树上所有结点关键字值均不大于根结点的关键字值

                             2>若右子树非空,则右子树上所有结点关键字值均不小于根结点的关键字值

                             3>左、右子树本身也是一棵二叉排序树。进行中序遍历的时候可以得到一个非递减的有序序列。


二叉平衡树(AVL树):左右子树的高度差(平衡因子,BF)为-1、0或1

如何调整二叉树成为平衡二叉树:1>LL平衡旋转(右单旋转):

                                                          (操作)在结点A的左孩子(L)的左子树(L)上插入新结点,以A为根的子树失去平衡

                                                          (调整)将A的左孩子B向右上旋转代替A成为根结点,A结点向右下旋转成为B的右子树的                                                              根结点

                                                      2>RR平衡旋转(左单旋转):

                                                          (操作)在结点A的右孩子(R)的右子树(R)上插入新结点,以A为根的子树失去平衡

                                                          (调整)将A的右孩子B向左上旋转代替A成为根结点,A结点向左下旋转成为B的左子树的                                                              根结点

                                                       3>LR平衡旋转(先左后右旋转):

                                                          (操作)在结点A的左孩子(L)的右子树(R)上插入新结点,以A为根的子树失去平衡

                                                          (调整)将A的左孩子B的右子树的根结点C向左上旋转至B的位置,然后再把C向右上旋转                                                            至A的位置

                                                       3>RL平衡旋转(先右后左旋转):

                                                          (操作)在结点A的右孩子(R)的左子树(L)上插入新结点,以A为根的子树失去平衡

                                                          (调整)将A的右孩子B的左子树的根结点C向右上旋转至B的位置,然后再把C向左上旋转                                                            至A的位置


哈夫曼树(Huffman):在含有N个结点的带权二叉树中,带权路径长度WPL最小的二叉树成为哈夫曼树,也称为最优二叉树。

哈夫曼树的构造过程:1>将这N个结点分别作为N棵仅含一个结点的二叉树,构成森林F

                                    2>构造一个新结点,并从F中选取两棵根结点权值最小的树作为新结点的左右子树,并且将新结点的权值                                      置为左右子树上根结点的权值之和

                                    3>从F中删除刚才选中的两棵树,同时将新得到的树加入F中

                                    4>重复步骤2,3,直至F中只剩下一棵树为止

哈夫曼树的特点:1>每个初始结点最终都成为叶结点,并且权值越小的结点到根结点的路径长度越大

                             2>构造过程中共新建了N-1个结点,因此哈夫曼树中结点总数为2N-1


树中每个节点表示表中的一个记录,节点里的值为该记录在表中的位置,通常称这个折半查找过程的二叉树为折半判定树。

二叉判定树的节点是各个元素的下标或在表中的位置。比如有一个文件【11,22,33,44,55,66】,我想查找44是否在该文件中,利用折半查找的思想,可以将此文件构造成一个二叉判定树。

根节点是3,注意二叉判定树的节点是下标或位置,这里不能写33。

折半判定树的构造方法:1>当n=0时,折半查找判定树为空;
                                        2>当n>0时,折半查找判定树的根结点为mid=(n+1)/2,
                                                              根结点的左子树是与有序表r[1] ~ r[mid-1]相对应的折半查找判定树,
                                                              根结点的右子树是与r[mid+1] ~ r[n]相对应的折半查找判定树。
折半判定树的特点:1>任意两棵折半查找判定树,若它们的结点个数相同,则它们的结构完全相同

                             2>具有n个结点的折半查找树的高度为

折半判定树的性质: 1>任意结点的左右子树中结点个数最多相差1

                                  2>任意结点的左右子树的高度最多相差1

                                  3>任意两个叶子所处的层次最多相差1

发布了42 篇原创文章 · 获赞 3 · 访问量 3915

猜你喜欢

转载自blog.csdn.net/zhangting19921121/article/details/104325009