第十二章动态数据结构内容摘要:
inorder( p right ) } } * + a / d * b c e f * + a / b c d * e f 后序遍历过程是: 得到表达式的表达式的逆波兰表示式(运算符在两个运算分量之后)。 后序遍历算法是: void postorder (treepointer p) { /*后序遍历 */ if ( p!=NULL ) { postorder( p left )。 postorder( p right ) printf(―%c‖ , p data )。 } } * + a / d * b c e f * + a / b c d * e f 检索 检索是按给定关键字值 c 在树上找一个结点 ti ,且 ti 的关键字值 key 恰好等于 c。 若检索到,函数将带回相应结点指针;否则若没检索到,函数将带回 NULL。 下述检索算法的前提条件是, p 是检索树。 treepointer search( typekey c , treepointer p ) { if ( ( p key == c ) || ( p == NULL ) ) return p。 else if ( c p key ) return search( c , p left )。 else return search( c , p right )。 } 插入一个结点 插入是指将一个数据项插入到树中某一恰当位置,使树仍保持检索树的性质。 显然,首先要按 key值查出应该插入的位置,然后再插入。 void insert( keytype c , datatype d , treepointer *p ) { if ( *p == NULL ) { *p = (treepointer)malloc(sizeof(struct tree))。 (*p) key = c。 (*p) data = d。 (*p) left = NULL。 (*p) right = NULL。 }else if ( c (*p) key ) insert( c , d , amp。 ((*p)left) )。 else insert( c , d , amp。 ((*p)right) )。 } 由于 insert 的参数 p 是指向指针的指针类型,在 insert 内 p 指向 指针类型的实在参数。 所以在执行 *p=(treepointer)malloc(sizeof(struct tree)) 时,将使实在参数指针变量指向新申请来的结点。 1) 若调用 insert 时,如图 root 为空树。 以 amp。 root 作实在参数调用 insert , 即 insert(c,d,amp。 root) insert 的形式参数 p 指向 root ,而 root 值为 NULL。 转插入功能,执行 *p=(treepointer)malloc(sizeof(struct tree)) 得 : 再执行后边的几个赋值语句 , 得 : root: c。 d p: 2) 若调用 insert时, root非空,在中间某一个结点查到空指 针,如图;设查到该结点后,应该继续向右查,以 amp。 ((*p)right) 作实在参数递归调用 insert,即执行 insert(c,d, amp。 ((*p)right) ) insert 的形式参数 p 指向本步的 (*p) right ,而 (*p) right 值为 NULL。 转插入功能,执行 *p=(treepointer)malloc(sizeof(struct tree)) 再执行后边的几个赋值语句 , 得 : c。 d ... ... p: 删除一结点 设欲删除结点为 r,则可能有如下几种情况。 针对不同情况删除算法不同 . r 是叶结点 :简单删掉 r 结点,并把 r 的父结点连接处改成 NULL 即可。 4 2 5 1 3 r: r 只有一个左子树 7 8 5 6 3 1 2 4 r: 7 8 5 6 4 2 3 1 r: r 只有一个子树 : 把 r 以下部分接入 r 的父结点连接 r 处。 然后删掉 r结点。 r 只有一个右子树 r 两个方向都有子树 : 在 r 的左子树上找到关键字 key 值最大的结点 s,把 s 结点的数据 data及关键字 key 复制到 r 结点上,然后删除掉 s 结点。 9 s: 10 r: 4 5 14 15 12 13 3 1 2 11 8 6 7 9当然也可以在 r的右子树上找到关键字 key值最小的结点s,把 s结点的数据 data及关键字 key复制到 r结点上,然后删除掉 s结点。 8 s: 5 r: 4 10 13 14 11 12 3 1 2 9 7 6 6使用在左子树上找最大结点的方法,按如下步骤进行 : ① 沿 r 左子树的右方向,向下找一个没有 右子树的结点 s ,图中结点 (9)。 ② 把该结点 s 的值复制到结点 r(即欲删除 的结点。 ③ 把 s 的左子树连在 s 的父结点(图中为 结点 (5) )的右链上,在图中即连到 (5) 结点的右链上。 ④ 删除 s结点,即图中的 (9)结点。 图 3的情况 r 两个方向都有子树 : 在 r 的左子树上找到关键字 key 值最大的结点 s,把 s 结点的数据 data及关键字 key 复制到 r 结点 上,然后删除掉 s 结点。 9 s: 10 r: 4 5 14 15 12 13 3 1 2 11 8 6 7 9 综合上述三种情况,下述函数 deletenode 完成删除一个结点。 deletenode的调用形式是: deletenode( valueofkey , amp。 root ) 其中 value_of_key是欲删除结点的关键字值; root是指针类型( treepointer)变量,指向树根。 这里 用指向指针的指针作参数。 treepointer del( treepointer * , treepointer * ); /* 处理第三种情况的函数的函数原型 */ void deletenode( keytype c , treepointer *p ) { /* 删除关键字值等于 c 的结点 */ treepointer r。 if ( *p == NULL ) printf( ―not found:%d\n‖ , c )。 else if ( c (*p) key ) /* c 当前结点的 key 值,被删结点在左子树上 */ deletenode( c , amp。 ((*p) left) )。 else if ( c (*p) key ) /* c 当前结点的 key 值,被删结点在右子树上 */ deletenode( c , amp。 ((*p) right ) )。 else{ r = *p。 if ( rright == NULL ) *p = r left /* 右子树空,接左分支 */ else if ( rleft == NULL ) *p = r right。 /* 左子树空,接右分支 */ else r=del( amp。 (rleft),p )。 /* 左右均非空 */ free( r )。 /* 释放 r */ } }。 4 5 6 2 7 1 3 8 root: p: deletenode( 4 , amp。 root ) r: r 只有一个左子树 treepointer del( treepointer *s, treepointer *p ) { /* 处理第三种情况,仅第三种情况调用 */ treepointer r。 if ((*s)right != NULL ) /* 右分支非空 ? */ r=del( amp。 ((*s)right),p ) //右分支非空 , 在右方向以下继续查找 else { /* 找到右分支为空的结点 *s */ (*p)key =(*s) key。 /* 复制 *s的关键字、数据到 *p结点 */ (*p)data =(*s) data。 r = *s。 /* r记载该 *s结点,为 free做准备 */ *s。第十二章动态数据结构
相关推荐
• (三)广告宣传功能 第二节 商标的分类 • 一、可视性商标和非可视性商标 ***音响商标、 ——缺乏视觉可视性 米高梅狮吼商标 ——米高梅公司 ***气味商标: • 商标说明:本气味商标系具有影响力的、新鲜的似花香的气味,会让人联想到茉莉花开的香味。 • 注册号:第 1639128 • 指定商品:第 23类缝纫线及刺绣线 • 专用权人:美商 Clarke,Celia 二、平面商标和立体商标
医院则被允许假定,当一个人去世后同意摘除他的器官以供移植,除非死者生前或死后其家属反对 由国家推定,所有公民都同意在死后捐献器官,因而由政府授权给医生,允许他在尸体上收集所需要的组织器官,而不需考虑死者及其家属的意愿。 10 其他国家的器官捐献 o 荷兰 : 18岁以上的荷兰男女公民都应填写 《 人体器官捐献普查表 》 ,然后由各级政府将普查结果逐级汇总到年中央档案库。 不满
英国 :1972年就开始发起题为 “ 我愿死后帮助某些人活着 ” 的器官捐献活动,每年散发 550万张捐献卡。 8 器官来源的其他方式 及其伦理问题 脑死亡 胎儿器官、组织和细胞 异种的器官移植 9 三、器官移植的伦理原则 器官移植的伦理原则 人道主义和功利主义相结合的原则 严格遵守医学标准,审慎地选择受体的原则 对供者和受者健康利益关心和忠诚的原则 为保护 “ 受者 ”
到的价格( Vn)的现值之和,即: 同股票一样,债券的价格系由其 “ 价值 ” 决定。 债券 “ 价值 ” 等于未来各期利息收入( Ct)和债券面值( F)的现值之和,即: 证券的价格是价证券在市场上买卖的价格。 证券价格由证券的 “ 价值 ” 决定。 然而,影响证券供求的因素是多种多样、错综复杂的,有时证券 的市场价格会大大背离其 “ 价值 ” 而产生莫名其妙的波动。
案件进行审查的期限,计入人民法院的审理期限。 二、开庭前的准备 依法组成合议庭 向被告人送达起诉书副本,告知有权委托辩护人或者依法为被告人指定辩护律师 通知检察院派员出庭支持公诉 传唤当事人,通知有关诉讼参与人出庭 公开审判的案件,先期公告 三 、 法庭审判 依据刑事诉讼法的规定,法庭审判分为五个阶段 : 开庭 被告人在庭审中的权利;对当庭申请回避的处理 法庭调查