发表日期: 2021-04-13 11:19:01 浏览次数:73
承德网络公司哪家好【承德企业网站百度SEO推广公司】承德做网站开发价格、承德淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、承德高端企业网站页面制作设计专业公司需要多少钱
承德,河北省地级市,河北省政府批复确定的河北国际旅游城市、连接京津辽蒙的区域性中心城市 [1] 。截至2019年,全市下辖3个区、4个县、代管1个县级市和3个自治县,总面积39519平方公里,常住人口347.32万人,城镇人口180.85万人,城镇化率52.07%。 [2]
承德地处中国东北地区、河北省东北部,南邻京津,北接赤峰和锡林郭勒,东西与朝阳、秦皇岛、唐山、张家口相邻,距省会石家庄435公里,距北京225公里。 [3] 是连接京津冀辽蒙的重要节点,具有“一市连五省”的独特区位优势,是国家甲类开放城市,中国普通话标准音采集地、中国摄影之乡、中国剪纸之乡。 [4]
承德是首批国家历史文化名城,1703年清康熙修建避暑山庄,成为清王朝的第二个政治中心;1723年设热河厅;1733年雍正取“承受先祖德泽”之义;赐字“皇承天德”释义先皇秉承天地化育万物的恩德; [5] 设承德直隶州,始称“承德”;民国和解放初期为原热河省省会;1955年,热河省建制撤销,承德划归河北省,为省辖市。承德的避暑山庄及其周围寺庙是中国十大风景名胜、旅游胜地四十佳、国家重点风景名胜区,被联合国教科文组织批准为世界文化遗产,也是国家首批世界文化遗产。 [4]
2012年,承德被评为中国“十大特色休闲城市”。2016年11月,承德市被中华人民共和国国家旅游局评为第二批国家全域旅游示范区。2017年10月,承德市入选国家森林城市。 [6] 2017年12月,获得“厕所革命优秀城市奖”。
继续示例5.23的问题,从技术上理解,对字符串进行比较需要的代码与图5-35相比稍有不同,图5-35中<
这样的算术比较要替代为对lt 这样恰当定义的函数的调用。图5-36展示了向图5-33插入Filthy后的二叉查找树。首先对根节点调用insert
,发现Filthy<Hairy
。因此,在图5-35的第(7)行,对左子节点调用insert
。结果发现Filthy>Bashful
,所以接着在第(9)行对右子节点调用insert
。这样就到了Grumpy
,它从词典顺序上在Filthy
之后,因此就要对Grumpy
的左子节点调用insert
。
指向Grumpy
左子节点的指针为NULL
,所以在第(1)行必须创建一个新节点。这棵单节点树会返回给Grumpy
节点处对insert
的调用,而且在第(7)行该树会被安置为Grumpy
左子节点的值。带有Grumpy
和Filthy
的修改过的树会返回给标号为Bashful
的节点处对insert
的调用。然后,以Bashful
为根节点的新树就成了整棵树根节点的左子树。最终的树如图5-36所示。
图 5-36 插入Filthy
之后的二叉查找树
从二叉查找树中删除某个元素x 要比查找或插入复杂一些。首先,要找出含有x 的节点;如果没有这样的节点,就算是完事了,因为x 不在这棵要处理的树里头。如果x 在叶子节点处,那么直接删除该叶子节点就行了。不过,如果x 是某个内部节点n,就不能直接删除该节点,因为这样做会破坏树的连通性。
我们必须以某种方式对树进行重新排列,从而在维持二叉查找树属性的同时让x 从树中消失。这会有两种情况。第一种,如果n 只有一个子节点,就用该子节点代替n,这样二叉查找树的属性就得到了保持。
第二种情况,假设n 的两个子节点都存在。一种策略就是找到标号为y 的节点m,它是n 右子树中最小的元素,并在节点n 处用y 代替x,如图5-37所示。然后就可以从右子树中删除节点m。
图 5-37 要删除x,先删除包含右子树中最小元素y 的节点,然后将节点n处的标号由x 替换为y
此时二叉查找树属性继续成立。原因在于,x 比n 的左子树中的所有元素都大,而y 大于x(因为y 在n 的右子树中),所以y 也比n 左子树的所有元素都大。因此,就n 的左子树而言,y 是适合于位置n 的元素。而对n 的右子树来说,y 也是适合作为根节点的,因为选出的y 是右子树中的最小元素。
ETYPE deletemin(TREE *pT) { ETYPE min;(1) if ((*pT)->leftChild == NULL) {(2) min = (*pT)->element;(3) (*pT) = (*pT)->rightChild;(4) return min; } else(5) return deletemin(&((*pT)->leftChild)); }复制代码
图 5-38 deletemin(pT)
函数会删除并返回T 的最小元素
如图5-38所示,可以很方便地定义deletemin(pT)
函数从非空二叉查找树中删除含最小元素的节点,并返回最小元素的值。我们给该函数传入的参数是指向树T 的指针的地址。该函数中所有对T 的引用都是通过该指针间接完成的。
我们给函数传入的参数,是指向某个位置的指针,而在这个位置可以找到指向节点(即树)的指针,这种风格的树操作叫作按引用调用。这在图5-38中是很关键的,因为第(3)行的指针指向左子节点为NULL
的节点m,我们希望将这一指针替代为另一个指针,节点m 的rightChild
字段中的指针。如果deletemin
的参数是指向节点的指针,那么这种改变就会在对deletemin
的调用中发生,而且树中的指针其实不会改变。顺便说一下,也可以使用按引用调用来实现插入操作。在那种情况下,可以直接对树进行修改,而不必像图5-35中所做的那样返回修改过的树。这里将这一修订过的insert
函数留作本节习题。
现在来看看图5-38的工作原理。沿着左子节点向下寻找,直到在图5-38的第(1)行找到左子节点为NULL的节点,就找到了最小的元素。在该节点m 处的元素y 一定是该子树中最小的元素。原因在于,这里完全是循着左子节点向下寻找的,这样一来y 要比m 在该子树中的任一祖先都小。而子树中其他节点要么是在m 的右子树中,根据二叉查找树属性这些元素肯定大于y,要么是在m 的某个祖先的右子树中。右子树中的元素肯定比m 的某个祖先处的元素大,因此也就大于y,如图5-39所示。
图 5-39 右子树中所有其他元素都大于y
在子树中找到最小的元素后,在第(2)行会记录下它的值,并在第(3)行用它的右子树代替最小元素所在节点。请注意,在从子树中删除最小元素时,总是有着最简单的删除情况,因为不存在左子树。
还有一点与deletemin
相关的内容就是,当第(1)行的测试失败时,就意味着还没到达最小元素,就要继续处理左子节点。这一步骤是通过第(5)行的递归调用完成的。
deletemin(x,pT)
函数如图5-40所示。如果pT
指向空树T,就没什么要做的,而且第(1)行的测试会确保什么事都没做。此外,第(2)行和第(4)行的测试会处理x 不在根节点的情况,会根据具体情况重定向到左子树或右子树。如果到达第(6)行,那么x 就一定在T 的根节点位置,而且我们必须替换该根节点。第(6)行会测试左子节点是否可能为NULL
,若为NULL
,那么就可以在第(7)行直接将T 替换为其右子树。同样地,如果在第(8)行发现右子节点为NULL
,那么就用T 的左子树来替代T。请注意,如果根节点的两个子节点都为NULL
,那么就在第(7)行将T 替换为NULL
。
void delete(ETYPE x, TREE *pT) { (1) if ((*pT) != NULL) (2) if (x < (*pT)->element) (3) delete(x, &((*pT)->leftChild)); (4) else if (x > (*pT)->element) (5) delete(x, &((*pT)->rightChild)); else /* 这里,x 在(*pT)的根节点处 */ (6) if ((*pT)->leftChild == NULL) (7) (*pT) = (*pT)->rightChild; (8) else if ((*pT)->rightChild == NULL) (9) (*pT) = (*pT)->leftChild; else /* 这里的两个子节点都不为NULL */(10) (*pT)->element = deletemin(&((*pT)->rightChild)); }复制代码
图 5-40 delete(x,pT)函数从T 中删除元素x
两个子节点均不为NULL
的情况是在第(10)行处理的。在这里会调用deletemin
,返回右子树的最小元素y,并从该子树中删除y 。第(10)行的赋值操作会在T 的根节点处用y 代替x 。
如果使用类似delete
(但能够比较字符串)的函数从图5-36中的二叉查找树删除Hairy
,结果如图5-41所示。因为Hairy
在具有两个子节点的节点中,所以delete
会调用deletemin
函数,从根节点的右子树中删除并返回最小的元素Happy
,然后Happy
就成了曾存放Hairy
的该树根节点的标号。
图 5-41 删除Hairy
后的二叉查找树
承德网络公司哪家好【承德企业网站百度SEO推广公司】承德做网站开发价格、承德淘宝店铺开店装修设计运营、公司网站制作方案流程改版维护费用、承德高端企业网站页面制作设计专业公司需要多少钱
备案号: 苏ICP备11067224号
CopyRight © 2011 书生商友信息科技 All Right Reserved
24小时服务热线:400-111-6878 E-MAIL:1120768800@qq.com QQ:1120768800
网址: https://www.768800.com 网站建设:上往建站
关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|
企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|
400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 昌平殡葬| 朝阳殡葬|
欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系
服务热线:400-111-6878