July_algorithm 4.树.pdf
《July_algorithm 4.树.pdf》由会员分享,可在线阅读,更多相关《July_algorithm 4.树.pdf(77页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、树七月算法邹博2015年10月25日10月算法在线班2/77树主要内容二叉查找树增删改查其他结构的基础:如平衡二叉树前序中序后序遍历三种遍历本身通过前序中序求后序平衡二叉树四种分类:左左、左右、右左、右右四种旋转:左旋和右旋;单旋转和双旋转增删改查B树及其变种分裂结点、合并结点R树实践中的应用10月算法在线班3/77树和二叉树 一般地说,树的结点间是无序的,即:一个结点有m个孩子,则L1L2Lm可以互换位置,仍然认为是一颗树。二叉树的两个孩子,一般称为左孩子、右孩子,不能互换位置。之所以这样定义,是因为有些算法,需要严格区分左右孩子,如前序-中序-后序遍历、堆排序等问题。从这个意义上说,树和二
2、叉树是两个概念,不能说二叉树是树的子集。注:这种区分非常弱而且乱,因为树还有“有序树”“无序树”的说法。10月算法在线班4/77树转换成二叉树10月算法在线班5/77树转换得到的二叉树右孩子 任意一颗树转换成二叉树,右孩子为空的数目为原树非叶结点+1。对于一颗树(非二叉树),因为任何一个非叶结点必然有孩子,所以,它必然有最右孩子。从而,这个最右孩子转换到二叉树结点后,右指针必然为空。同时,根结点必然没有兄弟,所以,根结点转换成二叉树结点后,必然右孩子为空。任意颗树转换成二叉树,右孩子为空的数目为原树非叶结点+1。如果是若干个树转二叉树,这若干个树最右边的那个树,是没有右孩子的。10月算法在线班
3、6/77树基本操作 插入 删除 查找 前序遍历 中序遍历 后序遍历10月算法在线班7/77二叉查找树 二叉查找树(二叉搜索树)是满足以下条件的二叉树:左子树上的所有结点值均小于根结点值,右子树上的所有结点值均不小于根结点值,左右子树也满足上述两个条件10月算法在线班8/77二叉查找树的查找 给定一颗二叉查找树,查找某结点p的过程如下:将当前结点cur赋值为根结点root;若p的值小于当前结点cur的值,查找cur的左子树;若p的值不小于当前结点cur的值,查找cur的右子树;递归上述过程,直到cur的值等于p的值或者cur为空;当然,若结点是结构体,注意定义“小于”“不小于”“等于”的具体函数
4、。10月算法在线班9/77Code10月算法在线班10/77二叉查找树的插入 插入过程如下:若当前的二叉查找树为空,则插入的元素为根结点,若插入的元素值小于根结点值,则将元素插入到左子树中,若插入的元素值不小于根结点值,则将元素插入到右子树中,递归上述过程,直到找到插入点为叶子结点。10月算法在线班11/77Code(recursion)10月算法在线班12/77Code10月算法在线班13/77二叉树的建立 依次插入:15,5,3,12,16,20,23,13,18,10,6,710月算法在线班14/77二叉查找树的删除 记待删除的结点为p,分三种情况进行处理:p为叶子结点 p为单支结点 p
5、的左子树和右子树均不空10月算法在线班15/77待删除点为叶子结点 p为叶子结点,直接删除该结点,再修改p的父结点的指针10月算法在线班16/77待删除点只有一个孩子 若p为单支结点(即只有左子树或右子树),则将p的子树与p的父亲结点相连,删除p即可10月算法在线班17/77待删除点有两个孩子 若p的左子树和右子树均不空,则找到p的直接后继d(p的右孩子的最左子孙),因为d一定没有左子树,所以使用删除单支结点的方法:删除d,并让d的父亲结点dp成为d的右子树的父亲结点;同时,用d的值代替p的值;对偶的,可以找到p的直接前驱x(p的左孩子的最右子孙),x一定没有右子树,所以可以删除x,并让x的父
6、亲结点成为x的左子树的父亲结点。10月算法在线班18/77待删除点有两个孩子 任务:删除p 过程:两步走 将p的直接后继的值拷贝到p处 删除p的直接后继10月算法在线班19/77Code10月算法在线班20/77Code10月算法在线班21/77Code split10月算法在线班22/77二叉树的遍历 前序遍历:访问根结点前序遍历左子树前序遍历右子树 中序遍历:中序遍历左子树访问根结点中序遍历右子树 后序遍历:后序遍历左子树后序遍历右子树访问根结点10月算法在线班23/77前序遍历 前序遍历:15,5,3,12,10,6,7,13,16,20,18,2310月算法在线班24/77Code10
7、月算法在线班25/77中序遍历 中序遍历:3,5,6,7,10,12,13,15,16,18,20,23二叉查找树的中序遍历,即为数据的升序过程10月算法在线班26/77Code10月算法在线班27/77Code10月算法在线班28/77后序遍历 后序遍历:3,7,6,10,13,12,5,18,23,20,16,1510月算法在线班29/77Code10月算法在线班30/77Code10月算法在线班31/77根据前序中序,计算后序 如:已知某二叉树的遍历结果如下,求它的后序遍历序列 前序遍历:GDAFEMHZ 中序遍历:ADEFGHMZ 两个步骤:根据前序中序,构造二叉树 后序遍历二叉树10
8、月算法在线班32/77根据前序中序,计算后序 前序遍历:GDAFEMHZ 中序遍历:ADEFGHMZ 根据前序遍历的特点得知,根结点为G;根结点将中序遍历结果ADEFGHMZ分成ADEF和HMZ两个左子树、右子树。递归确定中序遍历序列ADEF和前序遍历序列DAEF的子树结构;递归确定中序遍历序列HMZ和前序遍历序列MHZ的子树结构;10月算法在线班33/77根据前序中序,构造二叉树 前序遍历:GDAFEMHZ 中序遍历:ADEFGHMZ10月算法在线班34/77Code10月算法在线班35/77思考 若已知二叉树的中序和后序遍历序列,如何求二叉树、如何求二叉树的前序遍历序列呢?10月算法在线班
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- July_algorithm 4.树
限制150内