二叉树的遍历顺序 请写出下列树形图的前序遍历,中序遍历和后序遍历的顺序?
\u4e8c\u53c9\u6811\u7684\u524d\u5e8f\u4e2d\u5e8f\u540e\u5e8f\u904d\u5386\u8bbf\u95ee\u987a\u5e8f\u662f\u600e\u4e48\u56de\u4e8b\u554a\uff1f\u641e\u4e0d\u61c2\u6811\u7684\u904d\u5386\u7684\u4e09\u79cd\u60c5\u51b5\uff0c\u662f\u6839\u636e\u5de6\u5b50\u6811\u3001\u53f3\u5b50\u6811\u3001\u6839\u8fd93\u8005\u7684\u4e0d\u540c\u8bbf\u95ee\u6b21\u5e8f\u6765\u5b9a\u4e49\u7684\u3002\u6839\u5de6\u53f3\uff08\u6839\u5148\u8bbf\u95ee\uff09\uff0c\u5219\u4e3a\u5148\u5e8f\u904d\u5386\uff1b\u5de6\u6839\u53f3\uff0c\u5219\u4e3a\u4e2d\u5e8f\u904d\u5386\uff1b\u5de6\u53f3\u6839\uff0c\u5219\u4e3a\u540e\u5e8f\u904d\u5386\u3002\u4e3e\u4f8b\u5982\u4e0b:\u524d\u5e8f\u904d\u5386\u7ed3\u679c\u4e3a:ABC\u4e2d\u5e8f\u904d\u5386\u7ed3\u679c\u4e3a:BAC\u540e\u7eed\u904d\u5386\u7ed3\u679c\u4e3a:BCA
\u524d\u5e8f ABDHIEJKCFLMGNO
\u4e2d\u5e8f HDIBJEKALFMCNGO
\u540e\u5e8f HIDJKEBLMFNOGCA
遍历是对树的一种最基本的运算,所谓遍历二叉树,就是按一定的规则和顺序走遍二叉树的所有结点,使每一个结点都被访问一次,而且只被访问一次。由于二叉树是非线性结构,因此,树的遍历实质上是将二叉树的各个结点转换成为一个线性序列来表示。
设L、D、R分别表示遍历左子树、访问根结点和遍历右子树, 则对一棵二叉树的遍历有三种情况:DLR(称为先根次序遍历),LDR(称为中根次序遍历),LRD (称为后根次序遍历)。 线索二叉树(保留遍历时结点在任一序列的前驱和后继的信息):若结点有左子树,则其lchild域指示其左孩子,否则令lchild域指示其前驱;若结点有右子树,则其rchild域指示其右孩子,否则令rchild指示其后继。还需在结点结构中增加两个标志域LTag和RTag。LTag=0时,lchild域指示结点的左孩子,LTag=1时,lchild域指示结点的前驱;RTag=0时,rchild域指示结点的右孩子,RTag=1时,rchild域指示结点的后继。以这种结点结构构成的二叉线索链表,链表作为二叉树的存储结构,叫做其中指向结点前驱和后继的指针叫做线索,加上线索的二叉树称为线索二叉树。对二叉树以某种次序遍历使其变为线索二叉树的过程叫做线索化。若对二叉树进行中序遍历,则所得的线索二叉树称为中序线索二叉树,线索链表称为为中序线索链表。线索二叉树是一种物理结构。在中序线索树找结点后继的规律是:若其右标志为1,则右链为线索,指示其后继,否则遍历其右子树时访问的第一个结点(右子树最左下的结点)为其后继;找结点前驱的规律是:若其左标志为1,则左链为线索,指示其前驱,否则遍历左子树时最后访问的一个结点(左子树中最右下的结点)为其前驱。
在后序线索树中找到结点的后继分三种情况:
若结点是二叉树的根,则其后继为空;若结点是其双亲的右孩子,或是其双亲的左孩子且其双亲没有右子树,则其后继即为双亲结点;若结点是其双亲的左孩子,且其双亲有右子树,则其后继为双亲右子树上按后序遍历列出的第一个结点。
数据结构定义为:
/*二叉线索存储表示*/typedefenum{Link,Thread}PointerTag;/* Link(0):指针,Thread(1):线索*/typedefstruct BiThrNode{ TElemType data;struct BiThrNode *lchild,*rchild;/*左右孩子指针*/PointerTag LTag,RTag;/* 左右标志 */}BiThrNode,*BiThrTree;
绛旓細1銆佸厛鏍归亶鍘嗕竴鑸槸鍏堝簭閬嶅巻(Pre-order)锛屾寜鐓ф牴宸﹀彸鐨勯『搴忔部涓瀹氳矾寰勭粡杩囪矾寰勪笂鎵鏈夌殑缁撶偣銆傚湪浜屽弶鏍戜腑锛屽厛鏍瑰悗宸﹀啀鍙炽傚阀璁帮細鏍瑰乏鍙炽傞鍏璁块棶鏍圭粨鐐圭劧鍚庨亶鍘嗗乏瀛愭爲锛屾渶鍚庨亶鍘嗗彸瀛愭爲銆傚湪閬嶅巻宸︺佸彸瀛愭爲鏃讹紝浠嶇劧鍏堣闂牴缁撶偣锛岀劧鍚庨亶鍘嗗乏瀛愭爲锛屾渶鍚庨亶鍘嗗彸瀛愭爲锛屽鏋滀簩鍙夋爲涓虹┖鍒欒繑鍥炪備緥濡傦紝涓嬪浘鎵绀轰簩...
绛旓細1銆佽闂牴缁撶偣锛2銆佸厛搴忛亶鍘嗗乏瀛愭爲锛3銆佸厛搴忛亶鍘嗗彸瀛愭爲銆備腑搴忛亶鍘嗕簩鍙夋爲瑙勫垯锛氬乏-鏍-鍙 1銆佸厛涓簭閬嶅巻宸﹀瓙鏍戯紱2銆佸啀璁块棶鏍硅妭鐐癸紱3銆佹渶鍚庤闂腑搴忛亶鍘嗗彸瀛愭爲銆傚悗搴忛亶鍘嗕簩鍙夋爲瑙勫垯锛氬乏-鍙-鏍 1銆佸悗搴忛亶鍘嗗乏瀛愭爲锛2銆佸悗搴忛亶鍘嗗彸瀛愭爲锛3銆佽闂牴缁撶偣銆
绛旓細鏍戠殑閬嶅巻涓夌椤哄簭濡備笅锛1銆佸墠搴忛亶鍘:鏍硅妭鐐+宸﹀瓙鏍+鍙冲瓙鏍銆2銆侀亶鍘嗗乏瀛愭爲鍜屽彸瀛愭爲鏃讹紝浠嶇劧鍏堣闂牴鑺傜偣锛岀劧鍚庨亶鍘嗗乏瀛愭爲锛屾渶鍚庨亶鍘嗗彸瀛愭爲銆備腑搴忛亶鍘:宸﹀瓙鏍+鏍硅妭鐐+鍙冲瓙鏍戙3銆侀亶鍘嗗乏鍙冲瓙鏍戞椂锛屼粛鐒跺厛閬嶅巻宸﹀瓙鏍戯紝鍐嶉亶鍘嗘牴鑺傜偣锛屽悗閬嶅巻鍙冲瓙鏍戙傚悗搴忛亶鍘:宸﹀瓙鏍+鍙冲瓙鏍+鏍硅妭鐐广傞亶鍘嗗乏鍙冲瓙鏍戞椂锛屼粛鐒...
绛旓細浜屽弶鏍戞槸涓绉嶆爲褰㈢粨鏋勶紝姣忎釜鑺傜偣鏈澶氭湁涓や釜瀛愯妭鐐癸紝鍒嗗埆绉颁负宸﹀瓙鑺傜偣鍜屽彸瀛愯妭鐐广浜屽弶鏍戠殑閬嶅巻鏂瑰紡鏈変笁绉嶏細鍓嶅簭閬嶅巻銆佷腑搴忛亶鍘嗗拰鍚庡簭閬嶅巻銆鍓嶅簭閬嶅巻鐨勬柟寮忔槸棣栧厛璁块棶鏍硅妭鐐锛岀劧鍚庤闂乏瀛愭爲锛屾渶鍚庤闂彸瀛愭爲銆備腑搴忛亶鍘嗙殑鏂瑰紡鏄鍏堣闂乏瀛愭爲锛屾帴鐫璁块棶鏍圭粨鐐癸紝鏈鍚庤闂彸瀛愭爲銆傚悗搴忛亶鍘嗙殑鏂瑰紡鏄鍏堣...
绛旓細鍏堝簭锛氭槸浜屽弶鏍戦亶鍘嗕腑鐨勪竴绉嶏紝鍗冲厛璁块棶鏍圭粨鐐癸紝鐒跺悗閬嶅巻宸﹀瓙鏍戯紝鍚庨亶鍘嗗彸瀛愭爲銆傞亶鍘嗗乏銆佸彸瀛愭爲鏃讹紝鍏堣闂牴缁撶偣锛屽悗閬嶅巻宸﹀瓙鏍戯紝鍚庨亶鍘嗗彸瀛愭爲锛屽鏋滀簩鍙夋爲涓虹┖鍒欒繑鍥炪備腑搴忥細鏄簩鍙夋爲閬嶅巻涓殑涓绉嶏紝鍗冲厛閬嶅巻宸﹀瓙鏍戯紝鍚庤闂牴缁撶偣锛岀劧鍚庨亶鍘嗗彸瀛愭爲銆傝嫢浜屽弶鏍戜负绌哄垯缁撴潫杩斿洖銆傚悗搴忥細鏄簩鍙夋爲閬嶅巻涓殑...
绛旓細闄や簡鍏堝簭閬嶅巻銆佷腑搴忛亶鍘嗐佸悗搴忛亶鍘嗗锛岃繕鍙互瀵逛簩鍙夋爲杩涜灞傚簭閬嶅巻銆傝浜屽弶鏍戠殑鏍硅妭鐐规墍鍦ㄥ眰鏁颁负锛氬眰搴忛亶鍘嗗氨鏄粠鎵鍦ㄤ簩鍙夋爲鐨勬牴鑺傜偣鍑哄彂锛岄鍏堣闂涓灞傜殑鏍戞牴鑺傜偣锛岀劧鍚庝粠宸﹀埌鍙宠闂2灞備笂鐨勮妭鐐癸紝鎺ョ潃鏄涓夊眰鐨勮妭鐐癸紝浠ユ绫绘帹锛岃嚜涓婅屼笅锛岃嚜宸﹁嚦鍙抽愬眰璁块棶鏍戠殑缁撶偣鐨勮繃绋嬪氨鏄眰搴忛亶鍘嗐
绛旓細1锛鍏堝簭閬嶅巻锛屾寜鐓ф牴宸﹀彸鐨勯『搴忔部涓瀹氳矾寰勭粡杩囪矾寰勪笂鎵鏈夌殑缁撶偣銆傚湪浜屽弶鏍戜腑锛屽厛鏍瑰悗宸﹀啀鍙炽2锛変腑搴忛亶鍘嗭紝棣栧厛閬嶅巻宸﹀瓙鏍戯紝鐒跺悗璁块棶鏍圭粨鐐癸紝鏈鍚庨亶鍘嗗彸瀛愭爲銆3锛鍚庡簭閬嶅巻锛屽彲璁板仛宸﹀彸鏍广傚湪浜屽弶鏍戜腑锛屽厛宸﹀悗鍙冲啀鏍癸紝鍗抽鍏堥亶鍘嗗乏瀛愭爲锛岀劧鍚庨亶鍘嗗彸瀛愭爲锛屾渶鍚庤闂牴缁撶偣銆4锛夎繖妫典簩鍙夋爲鐨勬牴鑺傜偣鏄疉...
绛旓細瑙o細绗竴姝ワ細鏍规嵁鍓嶅簭閬嶅巻绗竴涓妭鐐逛负鏍硅妭鐐瑰緱鐭ワ紝A涓烘牴 绗簩姝ワ細鏍规嵁涓簭DBEAC寰楃煡锛孉鍓嶉潰鐨勬槸宸﹀瓙鏍戯紝璇存槑 DBE鍦 A宸︿晶锛孋鍦ㄥ彸渚э紝鐩墠鍙互寰楀嚭AC鐨勪綅缃 绗笁姝ワ細鏍规嵁鍓╀笅鐨勫墠搴 BDEC 寰楃煡锛孊涓烘牴 绗洓姝ワ細鏍规嵁鍓╀笅鐨勪腑搴 DBE 寰楃煡锛孌鍦˙宸︿晶锛孍鍦˙鍙充晶锛屾墍浠ュ彲浠ョ敾鍑烘暣涓簩鍙夋爲鍥 鏈枃...
绛旓細鍓嶅簭锛1鏄撳ぇ甯堛2瀵掑啺灏勬墜銆3鐩插儳銆4鐩栦鸡 涓簭锛2瀵掑啺灏勬墜銆1鏄撳ぇ甯堛3鐩插儳銆4鐩栦鸡 鍚庡簭锛2瀵掑啺灏勬墜銆4鐩栦鸡銆3鐩插儳銆1鏄撳ぇ甯 浜屻佷唬鐮佸疄鐜板墠銆佷腑銆鍚庡簭閬嶅巻 瀹炵幇鎬濊矾寰堢畝鍗曪細1銆佸垱寤鸿嫳闆勭粨鐐癸紝鍦ㄨ繖閲岀紪鍐欓亶鍘嗘柟娉曘2銆佸垱寤轰簩鍙夋爲锛岃皟鐢ㄩ亶鍘嗘柟娉曘3銆乵ain鏂规硶杩涜娴嬭瘯銆傝繍琛屾祴璇曢亶鍘嗛『搴忎笌涓婇潰棰勬祴...
绛旓細宸茬煡鏌愪簩鍙夋爲鐨勪腑鏍归亶鍘嗗簭鍒楁槸ABCDEFG,鍚庢牴閬嶅巻搴忓垪鏄疊DCAFGE,鍒欏畠鐨勫厛璺熼亶鍘嗗簭鍒楁槸锛欵ACBDGF銆傞鍏堟槑纭厛璺熼亶鍘嗭細涓乏鍙筹紱涓牴閬嶅巻锛氬乏涓彸锛涘悗鏍归亶鍘嗭細宸﹀彸涓1銆佸悗鏍归亶鍘嗘槑纭牴鑺傜偣鏄疎,涓牴閬嶅巻纭畾宸﹀瓙鏍戞槸ABCD锛屽彸瀛愭爲涓婃槸FG锛2銆佸悗搴忛亶鍘锛孉鏄乏瀛愭爲鐨勬牴锛岀劧鍚庡湪涓簭閲孉BCD鍒ゆ柇A娌℃湁宸...